我是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]]
答案 0 :(得分:1)
您的问题有多个方面。让我们详细看一下:
是否有可能恢复之前培训的权重和偏见?是的。您可以在新程序中创建tf.train.Saver
,并使用它从旧检查点加载变量值。如果您只想从旧模型加载某些变量,则可以在tf.train.Saver
constructor的delete_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参数来控制要优化的权重。如果您不包括已恢复的变量(或当前已经过培训的变量),则不应更改它们。