在CNN中保存并恢复

时间:2016-09-12 12:49:17

标签: python python-2.7 tensorflow conv-neural-network

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

如果可以在我的数据集中添加新类来进行部分培训吗?所以我只是想重新培训新班级而不是重新训练洞网络。是否有可能恢复以前训练中的重量和偏差,并训练新的课程?

我用于保存

In [45]: import itertools

In [46]: import operator

In [47]: [[e[0] for e in d[1]] for d in itertools.groupby(enumerate(my_list), key=operator.itemgetter(1))]
Out[47]: [[0, 1, 2, 3], [4, 5], [6, 7, 8, 9, 10, 11], [12, 13, 14]]

2 个答案:

答案 0 :(得分:1)

您的问题有多个方面。让我们详细看一下:

  • 是否有可能恢复之前培训的权重和偏见?是的。您可以在新程序中创建tf.train.Saver,并使用它从旧检查点加载变量值。如果您只想从旧模型加载某些变量,则可以在tf.train.Saver constructordelete_mock.method_expected_to_be_called.assert_called_once_with(args, kwargs) 参数中指定要恢复的变量子集。如果新模型中的变量具有不同的名称,则可能需要指定键值映射,如this answer中所述。

  • 是否可以在网络中添加课程?是的,虽然它有点棘手(可能还有其他方法)。我假设你的网络中有一个softmax分类器,它包括一个线性层(矩阵乘以一个大小为var_list的权重矩阵,然后添加一个长度为m * C的偏差向量。要添加类,您可以创建大小为C的矩阵和长度为m * C+1的向量,然后使用{{3}从现有权重初始化这些行的第一个C+1行/元素}}。 tf.Variable.scatter_assign()处理同一主题。

  • 是否可以进行部分培训?是的。我认为你的意思是'#34;只训练一些层,同时保持其他层不变。"您可以通过在调用This question时传递明确的变量列表来优化MMN suggests。例如,如果您正在添加上述类,则可能仅重新训练softmax权重和偏差,并保持卷积层'过滤常数。使用预先训练的Inception模型查看tf.train.Optimizer.minimize()以获取更多创意。

答案 1 :(得分:0)

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