好像还挺好玩的生成式对抗网络生成一维数据(SimpleGAN)

本文介绍了如何使用生成式对抗网络(GANs)生成一维数据。通过深度学习模型,SimpleGAN可以在训练后创建类似原始数据的新样本。文章详细阐述了模型的构建和训练过程,为读者提供了理解和应用GANs进行数据生成的基础。
摘要由CSDN通过智能技术生成
from __future__ import print_function, division
import os

os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
from keras.datasets import mnist
from keras.layers import Input, Dense, Reshape, Flatten, Dropout
from keras.layers import BatchNormalization, Activation, ZeroPadding2D
from keras.layers.advanced_activations import LeakyReLU
from keras.layers.convolutional import UpSampling2D, Conv2D
from keras.models import Sequential, Model
from keras.optimizers import Adam
import pandas as pd
import matplotlib.pyplot as plt
import sys
import numpy as np
import csv


class GAN():
    def __init__(self):
        self.data_rows = 1
        self.data_cols = 200
        self.channels = 1
        self.data_shape = (self.data_rows, self.data_cols)
        self.latent_dim = 100
        self.sample_size = 200
        optimizer = Adam(0.0002, 0.5)
        # 构建和编译判别器
        self.discriminator = self.build_discriminator()
        self.discriminator.compile(loss='binary_crossentropy',
                                   optimizer=optimizer,
                                   metrics=['accuracy'])

        # 构建生成器
        self.generator = self.build_generator()

        # 生成器输入噪音,生成假的图片
        z = Input(shape=(self.latent_dim,))
        data = self.generator(z)  # 生成器生成的图片

        # 为了组合模型,只训练生成器,不训练判别器
        self.discriminator.trainable = False

        # 判别器将生成的图像作为输入并确定有效性
        validity = self.discriminator(data)  # 这个是判别器判断生成器生成图片的结果

        # The combined model  (stacked generator and discriminator)
        # 训练生成器骗过判别器
        self
  • 8
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
GAN(Generative Adversarial Networks)是一种生成模型,可以用来生成各种类型的数据,包括一维数据。下面是一个简单的GAN生成一维数据的代码示例: ```python import numpy as np from keras.layers import Input, Dense from keras.models import Model from keras.optimizers import Adam # 定义生成器 def build_generator(input_size): input_layer = Input(shape=(input_size,)) x = Dense(16, activation='relu')(input_layer) x = Dense(16, activation='relu')(x) output_layer = Dense(1)(x) model = Model(inputs=input_layer, outputs=output_layer) return model # 定义判别器 def build_discriminator(): input_layer = Input(shape=(1,)) x = Dense(16, activation='relu')(input_layer) x = Dense(16, activation='relu')(x) output_layer = Dense(1, activation='sigmoid')(x) model = Model(inputs=input_layer, outputs=output_layer) model.compile(loss='binary_crossentropy', optimizer=Adam(lr=0.0002, beta_1=0.5)) return model # 定义GAN模型 def build_gan(generator, discriminator): discriminator.trainable = False input_layer = Input(shape=(100,)) generated_data = generator(input_layer) validity = discriminator(generated_data) model = Model(inputs=input_layer, outputs=validity) model.compile(loss='binary_crossentropy', optimizer=Adam(lr=0.0002, beta_1=0.5)) return model # 生成一维数据 def generate_data(num_samples): random_data = np.random.normal(0, 1, size=(num_samples, 100)) generated_data = generator.predict(random_data) return generated_data # 训练GAN模型 def train_gan(generator, discriminator, gan, num_epochs, batch_size): for epoch in range(num_epochs): random_data = np.random.normal(0, 1, size=(batch_size, 100)) generated_data = generator.predict(random_data) real_data = np.random.normal(4, 1.5, size=(batch_size, 1)) discriminator_loss_real = discriminator.train_on_batch(real_data, np.ones((batch_size, 1))) discriminator_loss_generated = discriminator.train_on_batch(generated_data, np.zeros((batch_size, 1))) discriminator_loss = 0.5 * np.add(discriminator_loss_real, discriminator_loss_generated) random_data = np.random.normal(0, 1, size=(batch_size, 100)) gan_loss = gan.train_on_batch(random_data, np.ones((batch_size, 1))) print("Epoch:", epoch, "Discriminator Loss:", discriminator_loss, "GAN Loss:", gan_loss) # 创建生成器、判别器和GAN模型 generator = build_generator(100) discriminator = build_discriminator() gan = build_gan(generator, discriminator) # 训练GAN模型 train_gan(generator, discriminator, gan, num_epochs=5000, batch_size=64) # 生成一维数据并可视化 generated_data = generate_data(1000) import matplotlib.pyplot as plt plt.hist(generated_data, bins=20) plt.show() ``` 该代码使用了Keras框架,通过建立生成器、判别器和GAN模型,以及训练GAN模型,来生成一维数据。其中,生成器和判别器都是使用Dense层建立的神经网络GAN模型则将生成器和判别器结合起来,通过训练让生成生成数据更加真实。最后,使用生成生成了1000个数据,并通过直方图可视化。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值