我在tensorflow中训练生成对抗网络(GAN),基本上我们有两个不同的网络,每个网络都有自己的优化器.
self.G, self.layer = self.generator(self.inputCT,batch_size_tf)
self.D, self.D_logits = self.discriminator(self.GT_1hot)
...
self.g_optim = tf.train.MomentumOptimizer(self.learning_rate_tensor, 0.9).minimize(self.g_loss, global_step=self.global_step)
self.d_optim = tf.train.AdamOptimizer(self.learning_rate, beta1=0.5) \
.minimize(self.d_loss, var_list=self.d_vars)
Run Code Online (Sandbox Code Playgroud)
问题是我首先训练其中一个网络(g)然后,我想一起训练g和d.但是,当我调用load函数时:
self.sess.run(tf.initialize_all_variables())
self.sess.graph.finalize()
self.load(self.checkpoint_dir)
def load(self, checkpoint_dir):
print(" [*] Reading checkpoints...")
ckpt = tf.train.get_checkpoint_state(checkpoint_dir)
if ckpt and ckpt.model_checkpoint_path:
ckpt_name = os.path.basename(ckpt.model_checkpoint_path)
self.saver.restore(self.sess, ckpt.model_checkpoint_path)
return True
else:
return False
Run Code Online (Sandbox Code Playgroud)
我有这样的错误(有更多的追溯):
Tensor name "beta2_power" not found in checkpoint files checkpoint/MR2CT.model-96000
Run Code Online (Sandbox Code Playgroud)
我可以恢复g网络并继续使用该功能进行训练,但是当我想从头开始标记d,并且从存储的模型中获取g时,我有这个错误.
我开始使用tensorflow(来自Caffe),我正在使用损失sparse_softmax_cross_entropy_with_logits.该函数接受标签,0,1,...C-1而不是onehot编码.现在,我想根据类标签使用加权; 我知道如果我使用softmax_cross_entropy_with_logits(一个热编码),可以用矩阵乘法来完成,有没有办法做同样的事情sparse_softmax_cross_entropy_with_logits?
我已经从作者那里获得了一篇论文的代码.问题是他已经将一些部分编译成静态库(.a)在开始时我无法使用它,因为我遇到了这个错误:
/usr/bin/ld: skipping incompatible ../lib/libmvvt.a when searching for -lmvvt
/usr/bin/ld: cannot find -lmvvt
Run Code Online (Sandbox Code Playgroud)
我意识到这是一个兼容性问题.我编译了其余库的代码,现在我得到它的工作,除了一个他没有提供源代码的库(只有标题).
在使用readelf检查库内部后,我可以看到该机器是MIPS R3000.
我的机器是x86-64.
有没有办法可以在我的机器中使用该库而无需重新编译它(因为我没有代码)?
谢谢!
我试图了解使用 minibatch SGD 时如何计算梯度。我已经在 CS231 在线课程中实现了它,但才意识到在中间层中,梯度基本上是为每个样本计算的所有梯度的总和(在 Caffe 或 Tensorflow 中的实现相同)。只有在最后一层(损失),它们才被样本数量平均。这样对吗?如果是这样,是否意味着因为在最后一层它们被平均,所以在进行反向传播时,所有梯度也会自动平均?谢谢!