在 CNN 中保存和恢复

Save and restore in CNN

我是 tensorflow 的初学者,我有一个与卷积神经网络中保存和恢复检查点相关的问题。我正在尝试创建 CNN 以 class 化面孔。我的问题是:

当我在我的数据集中添加新的 class 时是否可以进行部分训练?所以我只想重新训练新的 class 而不是重新训练 hole Network。是否可以恢复以前训练的权重和偏差并只训练新的 class ?

我正在使用保存

saver = tf.train.Saver(tf.all_variables())
save = saver.save(session, "/home/owner//tensorflownew_models.ckpt")

print("Model saved in file: %s" % save)

当然可以。您可以使用 tf.train.Optimizer.minimize() 中的 var_list 参数来控制要优化的权重。如果您不包括您恢复的变量(或当前已经训练的变量),它们不应该被更改。

您的问题涉及多个方面。让我们详细看看每个:

  • 是否可以恢复之前训练的权重和偏差?可以。您可以创建 tf.train.Saver in your new program and use it to load the values of variables from an old checkpoint. If you only want to load some of the variables from an old model, you can specify the subset of variables that you want to restore in the var_list argument to the tf.train.Saver constructor. If the variables in your new model have different names, you may need to specify a key-value mapping, as discussed in .

  • 是否可以将 class 添加到网络中? 是的,虽然这有点棘手(并且可能还有其他方法可以去做)。我假设你的网络中有一个 softmax classifier,它包括一个线性层(矩阵乘以大小为 m * C 的权重矩阵,然后添加一个长度为 C 的偏差向量).要添加 class,您可以创建一个大小为 m * C+1 的矩阵和一个长度为 C+1 的向量,然后从使用 tf.Variable.scatter_assign(). 的现有权重处理相同的主题。

  • 是否可以进行局部训练?可以。我假设你的意思是 "training only some of the layers, while holding other layers constant." 你可以像 by passing an explicit list of variables to optimize when calling tf.train.Optimizer.minimize(). For example, if you were adding a class as above, you might retrain only the softmax weights and biases, and hold the convolution layers' filters constant. Have a look at the tutorial on transfer learning 那样使用预训练的 Inception 模型来获得更多想法。