【发布时间】:2017-09-30 20:26:18
【问题描述】:
我正在尝试使用 tf.train.Saver() 在 tensorflow 中的两个卷积神经网络图之间应用迁移学习,并且我想验证我的方法是否按预期工作。有没有办法检查tf.layers.conv2d() 层中的可训练特征?
我的方法
1。初始化图层
conv1 = tf.layers.conv2d(inputs=X_reshaped, filters=conv1_fmaps, kernel_size=conv1_ksize,
strides=conv1_stride, padding=conv1_pad,
activation=tf.nn.relu,
kernel_initializer=tf.contrib.layers.xavier_initializer(),
bias_initializer=tf.zeros_initializer(), trainable=True,
name="conv1")
2。 {训练网络}
3。保存当前图表
tf.train.Saver().save(sess, "./my_model_final.ckpt")
4。构建包含相同层的新图,使用Saver() 加载指定的权重
reuse_vars = tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES,
scope="conv[1]")
reuse_vars_dict = dict([(var.op.name, var) for var in reuse_vars])
restore_saver = tf.train.Saver(reuse_vars_dict)
...
restore_saver.restore(sess, "./my_model_final.ckpt")
5。 {训练和评估新图表}
我的问题:
1) 我的代码“按预期”工作并且没有错误,但我不能 100% 确信它的工作方式与我认为的一样。有没有办法从图层打印可训练特征以确保我正确加载和保存权重?是否有使用tf.layers API 保存/加载参数的“更好”方法?我注意到 GitHub 上与此相关的 request。理想情况下,我想在第一张图 a) 初始化 b) 训练后和新图 i) 加载权重 ii) 训练/评估后检查这些值。
【问题讨论】:
标签: tensorflow