- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经为 DCGAN 构建了自己的实现在 TensorFlow培训 MNIST .
完整代码(可运行)可在 github 上找到:https://github.com/Daniel451/tfdcgan
随时提交拉取请求:)
虽然模型尝试学习生成 MNIST 样本,但其稳定性非常差且收敛缓慢(即使在 10 个 epoch 后,生成的样本仍然看起来非常不自然)。
有趣的是,我在 Keras 中实现了非常相同的模型(使用 TensorFlow 后端)首先,这按预期工作。它学习合理的过滤器,并且当输入标准正态分布时,生成器会返回漂亮的 MNIST 样本。
我怀疑这是损失函数或模型配置的问题,但我无法找到确切的问题。
我注意到的另一个奇怪的事情是 TensorFlow 实现需要鉴别器的输出具有(batch_size, 2)
的形状。因此,我使用 [0, 1]
编码生成器/假图像进行训练,并使用 [1, 0]
编码真实训练图像。
我的期望是只有 tf.nn.sparse_softmax_cross_entropy_with_logits应该需要这个形状,因为它需要稀疏标签才能工作......但即使 tf.nn.softmax_cross_entropy_with_logits和 tf.nn.sigmoid_cross_entropy_with_logits当鉴别器的形状为 (batch_size, 1)
时,不会返回有用的损失计算,其中生成器/假图像的编码仅为 0.0,真实训练图像的编码为 1.0。
Keras 实现可以很好地配合不同的损失函数和鉴别器的单个输出神经元。
这是生成器的(G)模型:
def model_generator(self, Z, reuse=True):
init_op = tf.contrib.layers.xavier_initializer(uniform=True, dtype=tf.float32)
with tf.variable_scope("g", initializer=init_op, reuse=reuse, dtype=tf.float32):
with tf.variable_scope("reshape"):
out = tf.layers.dense(Z, 7 * 7 * 256, activation=None)
out = tf.reshape(out, [-1, 7, 7, 256])
out = tf.layers.batch_normalization(out)
out = tf.nn.tanh(out)
with tf.variable_scope("deconv1"):
out = tf.layers.conv2d_transpose(out, 128, [3, 3], strides=[2, 2], padding="same")
out = tf.layers.batch_normalization(out)
out = tf.nn.tanh(out)
with tf.variable_scope("deconv2"):
out = tf.layers.conv2d_transpose(out, 64, [3, 3], strides=[2, 2], padding="same")
out = tf.layers.batch_normalization(out)
out = tf.nn.tanh(out)
with tf.variable_scope("output"):
out = tf.layers.conv2d_transpose(out, 1, [5, 5], strides=[1, 1], padding="same")
logits = out
output = tf.nn.tanh(out)
return output, logits
...这是鉴别器的(D)模型:
def model_discriminator(self, X, reuse=True, trainable=True):
init_op = tf.contrib.layers.xavier_initializer(uniform=False, dtype=tf.float32)
with tf.variable_scope("d", initializer=init_op, reuse=reuse, dtype=tf.float32):
with tf.variable_scope("conv1"):
out = tf.layers.conv2d(X, 64, [5, 5], strides=[2, 2], padding="same",
trainable=trainable)
out = tf.nn.tanh(out)
with tf.variable_scope("conv2"):
out = tf.layers.conv2d(out, 128, [3, 3], strides=[2, 2], padding="same",
trainable=trainable)
out = tf.nn.tanh(out)
with tf.variable_scope("output"):
out = tf.reshape(out, [-1, 7 * 7 * 128])
out = tf.layers.dense(out, 2, activation=None, trainable=trainable)
logits = out
output = tf.sigmoid(out)
return output, logits
我已经尝试了以下每个损失函数:
self.d_loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=self.D_logits, labels=self.Y))
self.dg_loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=self.DG_logits, labels=self.Y))
self.d_loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=self.D_logits, labels=self.Y))
self.dg_loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=self.DG_logits, labels=self.Y))
self.d_loss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(logits=self.D_logits, labels=self.Y))
self.dg_loss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(logits=self.DG_logits, labels=self.Y))
以下是相应的训练操作:
self.d_train_op = tf.train.AdamOptimizer(learning_rate=2e-4, beta1=0.5, beta2=0.999, name="Adam_D")\
.minimize(self.d_loss, var_list=tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope="d"))
self.g_train_op = tf.train.AdamOptimizer(learning_rate=2e-4, beta1=0.5, beta2=0.999, name="Adam_DG")\
.minimize(self.dg_loss, var_list=tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope="g"))
...beta1=0.5 由链接的论文建议,var_list=...
确保 D 或 G 得到训练,但绝不会两者兼而有之。
我已将 MNIST 输入图像归一化为区间 [-1.0, 1.0]
,如多个来源所建议的那样。
self.G
(生成器;用于预测)、self.D
(鉴别器;用于分类)和 self.DG
的实例化(生成器+鉴别器,为了训练生成器)看起来像这样:
# placeholder for noise Z, fed into G
self.Z = tf.placeholder(tf.float32, shape=[None, 100], name="Z")
# placeholder for X, image data fed into D
self.X = tf.placeholder(tf.float32, shape=[None, 28, 28, 1], name="X")
# placeholder for Y, labels for training
self.Y = tf.placeholder(tf.int32, shape=[None], name="Y")
self.G, self.G_logits = self.model_generator(self.Z, reuse=False)
self.D, self.D_logits = self.model_discriminator(self.X, reuse=False)
self.DG, self.DG_logits = self.model_discriminator(self.G, trainable=False)
我每批处理分 3 个步骤训练 DCGAN:
关于为什么这个网络表现不佳有什么想法吗?
最佳答案
我从你的问题中注意到的一件事是你提到你分三步进行训练。通常一个人分两步或一步进行训练。您可以单独训练鉴别器和生成器(2 个步骤),也可以一起训练(一个步骤)。
在训练鉴别器时,您可以获取真实样本和假样本的鉴别器输出,并生成两者的损失并应用梯度。
如果您一步训练,则需要确保以正确的顺序应用梯度。
关于python - TensorFlow DCGAN 模型 : stability and convergence problems,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43710471/
代码: import numpy from matplotlib.mlab import PCA file_name = "store1_pca_matrix.txt" ori_data = nump
我正在尝试使用 https://github.com/Michaelvll/DeepCCA 经过 20-40 次迭代后,出现以下错误: RuntimeError: symeig_cpu: the al
我正在实现 Converge 灯箱。开发服务器IP已经加入白名单。我可以通过消费获取 session token "https://api.demo.convergepay.com/hosted-pa
我有一个服务器程序,它从一组网络对等点中随机选择 10 个来完成一项任务。生成节点随机索引的代码如下: indices = let index = getStdRandom $ randomR (0,
我正在尝试用 Octave 计算梯度下降。每次迭代,我的 theta 都会呈指数级增长。我不确定问题是什么,因为我直接复制另一个函数。 这是我的矩阵: X = 1 98 1 94 1
我正在尝试使用来自 SkLearn 的 Kmeans 算法从一组数据中构建集群。我想知道如何确定算法是否真正收敛到一个数据的解决方案。 我们输入 tol 参数来定义收敛容差,但还有一个 max_ite
我正在尝试获取列表 v 的所有旋转。因此,在 rotations 的定义中,我使用翻转版本的 rotateLeft 作为第一个分支函数(为了首先接受列表),然后是返回list [0, 1, 2, ..
我一直在尝试通过构建简短的程序来学习 Haskell。我对函数式编程世界有点陌生,但已经做了大量的阅读。 我在 Haskell 中有一个相对较短的递归函数,用于使用牛顿法找到一个函数的根,达到浮点数允
我目前在训练 svm.OneClassSVM 时遇到问题. 我将问题简化为最小示例: from sklearn import svm import pandas as pd X_train = pd.
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve thi
我尝试了很多测试信用卡号,但总是返回结果是“无效卡”。 请求地址: https://demo.myvirtualmerchant.com/VirtualMerchantDemo/processxml.
以下nls代码抛出以下错误 Convergence failure: singular convergence (7)为 fm2 (对于 Data2 )。但是类似数据集的相同代码工作正常( fm1 用
我想使用 R 中的“neuralnet”包来训练神经网络。训练数据集是一个包含 8 个预测变量 (x1,x2,x3,...,x8) 和 1 个响应变量 (y) 的数据框。数据如下: data
我在使用 coxph() 时遇到一些问题。我有两个分类变量:性别和可能的原因,我想将其用作预测变量。性别只是典型的男性/女性,但可能的原因有 5 个选项。我不知道警告消息有什么问题。为什么置信区间从
我试图在 matplotlib 中的矩阵上进行 PCA,但不断遇到 LinAlgError: SVD 未收敛。我检查了我的数据是否有错误值。我能够在类似的数据集上实现 PCA,没有任何问题,但在这种情
我编写了一个使用 Armadillo svd_econ 函数的函数。我正在尝试处理 svd 无法收敛的情况,因为出于某种原因在这种情况下它不会中止函数。 有问题的错误是: error: svd_eco
为 Adrian 运行线性二进制模式的代码。该程序运行但给出以下警告: C:\Python27\lib\site-packages\sklearn\svm\base.py:922: Convergen
我试图用 Scipy 解决一个大的特征值问题,其中矩阵 A是密集的,但我可以计算它对向量的作用而无需组装 A明确地。因此,为了避免矩阵 A 变大时出现内存问题,我想使用稀疏求解器 scipy.spar
背景:我正在开发一个使用statsmodels的程序,该程序适合27个arima模型(p,d,q = 0,1,2)到100多个变量,并为AR/选择具有最低aic和具有统计意义的t统计量的模型Dicke
我已经为 DCGAN 构建了自己的实现在 TensorFlow培训 MNIST . 完整代码(可运行)可在 github 上找到:https://github.com/Daniel451/tfdcga
我是一名优秀的程序员,十分优秀!