关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 SilyaSophie 2024-04-01 22:15
采纳率: 60%
浏览 6 首页/
编程语言
/ 关于#Python#生成对抗网络代码的问题,如何解决?(相关搜索:python代码|数据集|训练集) pythonkeras生成对抗网络 代码如下:
from __future__ import print_function, division
from keras.datasets import mnist
from keras.layers import Input, Dense, Reshape, Flatten, Conv1D,GRU,Dropout,InputLayer
from keras.layers import BatchNormalization, Activation, ZeroPadding2D
from keras.layers.convolutional import UpSampling2D, Conv2D
from keras.models import Sequential, Model
from keras.optimizers import Adam
import matplotlib.pyplot as plt
import sys
import numpy as np
import pandas as pd
import import2023
class GAN:
def __init__(self):
self.img_rows = 28
self.img_cols = 28
self.channels = 1
self.img_shape = (self.img_rows, self.img_cols, self.channels)
self.latent_dim = 100
optimizer = Adam(0.0002, 0.5)
# Build and compile the discriminator
self.discriminator = self.build_discriminator()
self.discriminator.compile(loss='mse',
optimizer=optimizer,
metrics=['accuracy'])
# Build the generator
self.generator = self.build_generator()
# The generator takes noise as input and generates imgs
z = Input(shape=(self.latent_dim,))
img = self.generator(z)
# For the combined model we will only train the generator
self.discriminator.trainable = False
# The discriminator takes generated images as input and determines validity
validity = self.discriminator(img)
# The combined model (stacked generator and discriminator)
# Trains the generator to fool the discriminator
self.combined = Model(z, validity)
self.combined.compile(loss='mse', optimizer=optimizer)
def build_generator(self):
model = Sequential()
model.add(GRU(256, input_shape=self.img_shape, activation='relu'))
#model.add(Dense(256, input_dim=self.latent_dim))
model.add(Dense(512, activation='relu'))
model.add(BatchNormalization(momentum=0.8))
model.add(Dense(512))
model.add(Dense(512, activation='relu'))
model.add(BatchNormalization(momentum=0.8))
model.add(Dense(1024))
model.add(Dense(1024, activation='relu'))
model.add(BatchNormalization(momentum=0.8))
model.add(Dense(np.prod(self.img_shape), activation='tanh'))
model.add(Reshape(self.img_shape))
model.summary()
noise = Input(shape=(self.latent_dim,1,1))
img = model(noise)
return Model(noise,img)
def build_discriminator(self):
model = Sequential()
#model.add(Flatten(input_shape=self.img_shape))
model.add(InputLayer(input_shape=(32, 64)))
#model.add(Dense(256,input_shape=self.img_shape,activation='relu'))
#Conv2D(filters, kernel_size, data_format='NHWC')
model.add(Conv1D(1024, kernel_size=3, strides=2, padding='same', data_format='channels_first',activation='relu'))
model.add(Dense(512))
model.add(Dense(512, activation='relu'))
model.add(Dense(256))
model.add(Dense(64, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.summary()
img = Input(shape=self.img_shape)
validity = model(img)
return Model(img,validity)
def train(self, epochs, batch_size=128, sample_interval=50):
# Load the dataset
# csv文件路径
csv_path_train = 'E:/dataset/CICIoT2023/benign.csv'
# 读取数据
X_train= pd.read_csv(csv_path_train)
# Rescale -1 to 1
X_train = X_train / 127.5 - 1.
#X_train = np.expand_dims(X_train, axis=3)
X_train = np.reshape(X_train, (-1, 100, 46))
print(X_train.shape)
# Adversarial ground truths
valid = np.ones((batch_size, 1))
fake = np.zeros((batch_size, 1))
print(valid.shape)
print(fake.shape)
for epoch in range(epochs):
# ---------------------
# Train Discriminator
# ---------------------
# Select a random batch of images
idx = np.random.randint(0, X_train.shape[0], batch_size)
imgs = X_train[idx]
print(imgs.shape)
noise = np.random.normal(0, 1, (batch_size, self.latent_dim,1))
print(noise.shape)
# Generate a batch of new images
gen_imgs = self.generator.predict(noise)
# Train the discriminator
d_loss_real = self.discriminator.train_on_batch(imgs, valid)
d_loss_fake = self.discriminator.train_on_batch(gen_imgs, fake)
d_loss = 0.5 * np.add(d_loss_real, d_loss_fake)
# ---------------------
# Train Generator
# ---------------------
noise = np.random.normal(0, 1, (batch_size, self.latent_dim,1))
# Train the generator (to have the discriminator label samples as valid)
g_loss = self.combined.train_on_batch(noise, valid)
# Plot the progress
print("%d [D loss: %f, acc.: %.2f%%] [G loss: %f]" % (epoch, d_loss[0], 100 * d_loss[1], g_loss))
# # If at save interval => save generated image samples
# if epoch % sample_interval == 0:
# self.sample_images(epoch)
if __name__ == '__main__':
gan = GAN()
gan.train(epochs=30000, batch_size=32, sample_interval=200)
运行结果及报错:
展开全部
收起
写回答
好问题
0 提建议
追加酬金
关注问题
微信扫一扫 点击复制链接 分享 邀请回答
编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0
(可追加 ¥500)
¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付
二维码出错
点击刷新
支付金额
15 元
提供问题酬金的用户不参与问题酬金结算和分配
支付即为同意
《付费问题酬金结算规则》 结题 再想想 删除 再等等
3条回答 默认 最新
关注
关注
该回答引用自GPT-3.5,由博主GISer Liu编写:
根据您提供的代码和问题描述,有几个需要注意的地方:
- 数据集问题 :您的代码中使用了
mnist
数据集,但是您希望使用的是自己的数据集。您需要替换mnist
数据集加载的部分,改为加载您自己的数据集。根据您的代码,您的数据集似乎是一个CSV文件,您可以使用pd.read_csv
来加载数据集,并对数据进行预处理,确保数据的维度和范围符合模型的要求。 - 输入形状问题 :您的生成器模型和判别器模型的输入形状不一致。生成器模型的输入形状为
(self.latent_dim,1,1)
,而判别器模型的输入形状为self.img_shape
。您需要确保两个模型的输入形状一致,以便正确地连接它们。 - 生成器模型问题 :生成器模型的输出形状应该与图像形状一致,即
(self.img_rows, self.img_cols, self.channels)
,但是您的生成器模型最后一层输出形状为self.img_shape
,这可能导致模型无法正确生成图像。您需要修改生成器模型的最后一层,使其输出形状符合图像形状。 - 训练过程问题 :在训练过程中,您需要确保生成器和判别器的输入形状一致,并且正确地传递真实图像和生成图像。您还需要注意确保输入数据的范围正确,通常在训练前会对数据进行归一化处理。
基于以上问题,您可以按照以下步骤修改您的代码: - 替换数据集加载部分,确保加载自己的数据集并进行预处理。
- 修改生成器模型的最后一层,使其输出形状为
(self.img_rows, self.img_cols, self.channels)
。 - 修改生成器和判别器模型的输入形状,使其一致。
- 确保在训练过程中传递正确的输入数据。
这些修改应该能够解决您遇到的问题。如果您需要进一步的帮助或有其他问题,请随时提出。
如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?
解决
无用
评论
打赏
微信扫一扫 点击复制链接
分享 举报
-
【相关推荐】
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?
解决
无用
评论
打赏
微信扫一扫 点击复制链接
分享 举报