- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是生成网络的新手,我决定先自己尝试一下,然后再查看代码。这些是我用来训练我的 GAN 的步骤。
[库: tensorflow ]
1) 在数据集上训练鉴别器。 (我使用了 2 个特征的数据集,标签为“mediatating”或“not meditating”,数据集:https://drive.google.com/open?id=0B5DaSp-aTU-KSmZtVmFoc0hRa3c)
2) 鉴别器训练完成后,将其保存。
3) 为另一个前馈网络(或任何其他取决于您的数据集)制作另一个文件。这个前馈网络就是生成器。
4) 构建生成器后,恢复鉴别器并为生成器定义损失函数,使其学会欺骗鉴别器。 (这在 tensorflow 中不起作用,因为 sess.run() 不返回 tf 张量并且 G 和 D 之间的路径中断,但应该从头开始工作)
d_output = sess.run(graph.get_tensor_by_name('ol:0'), feed_dict={graph.get_tensor_by_name('features_placeholder:0'): g_output})
print(d_output)
optimize_for = tf.constant([[0.0]*10]) #not meditating
g_loss = -tf.reduce_mean((d_output - optimize_for)**2)
train = tf.train.GradientDescentOptimizer(learning_rate).minimize(g_loss)
我们为什么不这样训练生成器呢?这看起来简单多了。的确,我无法在 tensorflow 上运行它,但如果我从头开始,这应该是可能的。
完整代码:
鉴别器:
import pandas as pd
import tensorflow as tf
from sklearn.utils import shuffle
data = pd.read_csv("E:/workspace_py/datasets/simdata/linear_data_train.csv")
learning_rate = 0.001
batch_size = 1
n_epochs = 1000
n_examples = 999 # This is highly unsatisfying >:3
n_iteration = int(n_examples/batch_size)
features = tf.placeholder('float', [None, 2], name='features_placeholder')
labels = tf.placeholder('float', [None, 1], name = 'labels_placeholder')
weights = {
'ol': tf.Variable(tf.random_normal([2, 1]), name = 'w_ol')
}
biases = {
'ol': tf.Variable(tf.random_normal([1]), name = 'b_ol')
}
ol = tf.nn.sigmoid(tf.add(tf.matmul(features, weights['ol']), biases['ol']), name = 'ol')
loss = tf.reduce_mean((labels - ol)**2, name = 'loss')
train = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)
sess = tf.Session()
sess.run(tf.global_variables_initializer())
for epoch in range(n_epochs):
ptr = 0
data = shuffle(data)
data_f = data.drop("lbl", axis = 1)
data_l = data.drop(["f1", "f2"], axis = 1)
for iteration in range(n_iteration):
epoch_x = data_f[ptr: ptr + batch_size]
epoch_y = data_l[ptr: ptr + batch_size]
ptr = ptr + batch_size
_, lss = sess.run([train, loss], feed_dict={features: epoch_x, labels:epoch_y})
print("Loss @ epoch ", epoch, " = ", lss)
print("\nTesting...\n")
data = pd.read_csv("E:/workspace_py/datasets/simdata/linear_data_eval.csv")
test_data_l = data.drop(["f1", "f2"], axis = 1)
test_data_f = data.drop("lbl", axis = 1)
print(sess.run(ol, feed_dict={features: test_data_f}))
print(test_data_l)
print("Saving model...")
saver = tf.train.Saver()
saver.save(sess, save_path="E:/workspace_py/saved_models/meditation_disciminative_model.ckpt")
sess.close()
生成器:
import tensorflow as tf
# hyper parameters
learning_rate = 0.1
# batch_size = 1
n_epochs = 100
from numpy import random
noise = random.rand(10, 2)
print(noise)
# Model
input_placeholder = tf.placeholder('float', [None, 2])
weights = {
'hl1': tf.Variable(tf.random_normal([2, 3]), name = 'w_hl1'),
'ol': tf.Variable(tf.random_normal([3, 2]), name = 'w_ol')
}
biases = {
'hl1': tf.Variable(tf.zeros([3]), name = 'b_hl1'),
'ol': tf.Variable(tf.zeros([2]), name = 'b_ol')
}
hl1 = tf.add(tf.matmul(input_placeholder, weights['hl1']), biases['hl1'])
ol = tf.add(tf.matmul(hl1, weights['ol']), biases['ol'])
sess = tf.Session()
sess.run(tf.global_variables_initializer())
g_output = sess.run(ol, feed_dict={input_placeholder: noise})
# restoring discriminator
saver = tf.train.import_meta_graph("E:/workspace_py/saved_models/meditation_disciminative_model.ckpt.meta")
saver.restore(sess, tf.train.latest_checkpoint('E:/workspace_py/saved_models/'))
graph = tf.get_default_graph()
d_output = sess.run(graph.get_tensor_by_name('ol:0'), feed_dict={graph.get_tensor_by_name('features_placeholder:0'): g_output})
print(d_output)
optimize_for = tf.constant([[0.0]*10])
g_loss = -tf.reduce_mean((d_output - optimize_for)**2)
train = tf.train.GradientDescentOptimizer(learning_rate).minimize(g_loss)
最佳答案
鉴别器的目的不是对您的原始数据进行分类,也不是真正鉴别原始数据的任何内容。它的唯一目的是将生成器的输出与原始输出区分开来。
想一个艺术伪造者的例子。你的数据集都是原画。你的生成器网络 G 是一个艺术品伪造者,而你的鉴别器 D 是一个侦探,其唯一的生活目的就是找到 G 制造的伪造品。
D光看原画是学不到多少的。对他来说真正重要的是弄清楚是什么让 G 的伪造品与众不同。如果他的所有作品都被 D 发现并标记为伪造品,G 就无法通过销售伪造品赚钱,因此他必须学会如何阻止 D。
这创造了一个环境,在这个环境中,G 不断尝试使他的作品看起来更“像”原创艺术品,而 D 不断地越来越善于发现 G 的伪造风格的细微差别。 D 越好,G 就需要越优秀才能谋生。他们每个人都在自己的任务中做得更好,直到他们(理论上)达到由网络的复杂性和他们试图伪造的数据定义的某种纳什均衡。
这就是为什么 D 需要与 G 来回训练的原因,因为它需要知道并适应 G 的特殊细微差别(随着 G 的学习和适应而变化),而不仅仅是找到一些“不”的平均定义伪造”。通过让 D 专门猎杀 G,你可以迫使 G 成为一个更好的伪造者,从而最终得到一个更好的生成器网络。如果你只训练 D 一次,那么 G 可以学习一些简单、明显、不重要的方法来打败 D,而实际上永远不会产生很好的伪造。
关于python - 为什么不这样训练 GAN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46777793/
本文为生成对抗网络GAN的研究者和实践者提供全面、深入和实用的指导。通过本文的理论解释和实际操作指南,读者能够掌握GAN的核心概念,理解其工作原理,学会设计和训练自己的GAN模型,并能够对结果
我设置了具有透明度的图像。 我正在尝试训练 GAN(生成对抗网络)。 如何保持透明度。我可以从输出图像中看到所有透明区域都是黑色的。 我怎样才能避免这样做? 我认为这叫做“阿尔法 channel ”。
我有 GAN 网络,它应该生成剑的 3D 模型。我基于 Tensorflow GAN 生成数字图像的教程构建它:https://www.tensorflow.org/tutorials/generat
我是生成网络的新手,我决定先自己尝试一下,然后再查看代码。这些是我用来训练我的 GAN 的步骤。 [库: tensorflow ] 1) 在数据集上训练鉴别器。 (我使用了 2 个特征的数据集,标签为
我正在尝试构建一个简单的 mnist GAN,不用多说,它没有用。我搜索了很多并修复了我的大部分代码。虽然我不能真正理解损失函数是如何工作的。 这是我做的: loss_d = -tf.reduce_m
我正在训练一个 GAN 来执行来自两个不同图像域(源 S 和目标 T)的风格转换。因为我有可用的类信息,所以我有一个额外的 Q 网络(G 和 D 除外),用于测量生成图像的分类结果目标域及其标签(Le
我训练了一个 GAN 来重现类似 CIFAR10 的图像。最初我注意到生成器生成的一批图像中的所有图像看起来总是一样的,如下图所示: 经过数小时的调试和与初学者学习资源教程 (https://mach
在阅读了 GAN 教程和代码示例后,我仍然不明白生成器是如何训练的。假设我们有一个简单的案例:- 生成器输入是噪声,输出是灰度图像 10x10- 鉴别器输入是图像 10x10,输出是从 0 到 1 的
这是我第一次使用 GAN,我面临着一个问题,即鉴别器的性能反复优于生成器。我正在尝试从 this article 重现 PA 模型,我正在寻找 this slightly different impl
我是 GAN 的新手。我正在学习对 GAN 进行建模以生成图像,但是我真的不明白给予生成器的随机噪声到底是什么。它是从 0 到 1 的随机数,它的大小应该是多少。每次发电机运行时,随机噪声也应该是恒定
最初由 IJ Goodfellow 提出的 GAN 使用以下损失函数, D_loss = - log[D(X)] - log[1 - D(G(Z))] G_loss = - log[D(G(Z))]
我创建了一个简单的 DCGAN 6 层,并在 CelebA 数据集(其中一部分包含 30K 图像)上进行训练。 我注意到我的网络生成的图像看起来很暗,随着网络训练的增多,明亮的颜色逐渐变暗! 这里有一
我试图在 Keras 中实现基本的 GAN,基于 this执行。 如果我在抛物线 GAN 上采样点是收敛的并且能够从这个分布中产生样本,但是如果例如我在圆上采样点它就会失败。我想知道为什么 GAN 很
我正在使用 Wasserstein GAN 开展一个项目,更具体地说,是实现 Wasserstein GAN 的改进版本。我有两个关于 wGAN 的稳定性和训练过程的理论问题。首先,众所周知,损失函数
我目前正在考虑在 keras 中实现 Self-Attention GAN。我想实现的方式如下: def Attention(X, channels): def hw_flatten(x):
我有一个 GAN 网络。生成器正在绘制 mnist 数字。效果很好。但我不明白它是如何知道应该绘制哪个数字的。这是生成器: def build_generator(latent_size):
我正在尝试在 tensorflow 中构建 LSTM-GAN。 仅在鉴别器网络中,当我尝试计算损失时,我会得到错误 ValueError: No gradients provided for any
我按照 GAN 上的教程进行操作 - https://github.com/adeshpande3/Generative-Adversarial-Networks/blob/master/Genera
为了深入了解生成对抗网络,我正在尝试基于此 Stanford university assignment 自己为 MNIST 数据集实现 GAN。使用 tensorflow 。 我仔细审查和研究了给定
类别不平衡问题是 GAN 固有的吗?在 GAN 中,有 2 个网络相互对抗,一个是分类器,对手试图通过生成假图像来愚弄分类器。 GAN 生成的所有图像都是假的,因此如果算法运行足够长的时间,必然会出现
我是一名优秀的程序员,十分优秀!