我在Tensorflow Hub: Fine-tune and evaluate的另一个场合问了这个问题,但没有得到任何答复。此外,我还提出了Github issue,但仍在等待答复。但是,如果有人可以指出正确的方向,我将再次提出这个问题。
我面临的问题与一段时间内优化Tensorflow Hub模块,在验证集上对其进行评估,再次对其进行微调,在验证集上对其进行评估并进行迭代有关。特别是,我想在训练模式下加载Tensorflow Hub模块,假设它是Resnet152:
resnet = hub.Module("https://tfhub.dev/google/imagenet/resnet_v2_152/feature_vector/3", trainable=True, tags={"train"})
有一个占位符,指示模块是处于training
还是evaluation
模式:
is_training = tf.placeholder_with_default(False, None)
从中提取特征,同时指示模块处于training
还是evaluation
模式并进一步传播它们:
features = resnet(images, signature="image_feature_vector", training=is_training)
dense = tf.layers.dense(features, 10)
然后,训练整个图的时间,然后对验证集执行评估:
epochs = 5
with tf.Session() as sess:
for _ in epochs:
sess.run(train_step, feed_dict={is_training:True})
sess.run(val_step)
要正确执行此操作,必须有一种方法可以动态关闭模块的batch-norm
和dropout
,这是我不知道怎么做的方法。请注意,使用training=is_training
是错误的,因为模块上的training
属性不存在。
期待您的回答!