我想通过在tensorflow中将conv层插入到学习的DNN来创建一个新网络。
例如,来自
[conv2d_a -> conv2d_b]
到
[conv2d_a -> conv2d_c(inserted) -> conv2d_b].
插入图层以外的图层使用学习的权重conv2d_a
,并且通过重新学习conv2d_c
来学习插入的转化图层的权重。
此代码不起作用:
with tf.Session() as sess:
saver.restore(sess, "/tmp/model.ckpt")
conv2d_a = tf.get_default_graph().get_tensor_by_name("conv2d_a")
# get next layer of conv2d_a (= conv2d_b)
tmp_a_next = conv2d_a.next
# generate new layer connecting to conv2d_a
conv2d_c = tf.layers.conv2d(inserts=conv2d_a...)
# change previous layer of conv2d_b from conv2d_a to conv2d_c
tmp_a_next.prev = conv2d_c
答案 0 :(得分:0)
您可以创建一个新模型(带有插入的图层或其他添加项)并仅恢复检查点中的变量(您需要自己初始化剩余的变量)。
这是要做到这一点的要点。它将具有相同名称和形状的变量(在检查点和当前图形中)视为相同。
https://gist.github.com/iganichev/d2d8a0b1abc6b15d4a07de83171163d4