如何批量通过TensorFlow-Slim VGG Pre-Trained Net传递图像?
How to pass images through TensorFlow-Slim VGG Pre-Trained Net in Batches?
我想通过网络传递图像以进行迁移学习任务。在下面的代码中,我正在构建图形,然后获取全连接层的输出。我想批量获取输出,因为我有一个包含超过 20k 个图像的数组。
vgg.vgg_16(images)
要求 images
是图像数组。我尝试输入一个输入占位符(在查看 docs 之后)但是在加载检查点时我得到了一个错误 There are no variables to save
.
我可以一次提供 vgg.vgg_16(images)
几张图片,但我需要为每批加载检查点。我很确定有更好的方法可以做到这一点。有没有我可以看的例子或参考资料?
from tensorflow.contrib import slim
from tensorflow.contrib.slim.nets import vgg
images = np.array(read_images(val_filenames[:4], 224, 224), dtype=np.float32) # load images and resize to 224 x 224
vgg_graph = tf.Graph()
with vgg_graph.as_default():
with slim.arg_scope(vgg.vgg_arg_scope()):
outputs, end_points = vgg.vgg_16(images, is_training=False)
fc6 = end_points['vgg_16/fc6']
with tf.Session(graph=vgg_graph) as sess:
saver = tf.train.Saver()
saver.restore(sess, 'checkpoints/vgg_16.ckpt')
# pass images through the network
fc6_output = sess.run(fc6)
您可以创建一个 placeholder
并将其传递给 vgg
网络。将您的代码更改为:
images = tf.placeholder(tf.float32, shape=[batch_size, height, width, channels])
with slim.arg_scope(vgg.vgg_arg_scope()):
outputs, end_points = vgg.vgg_16(images, is_training=False)
并且在训练期间,将输入传递给网络:
fc6_output = sess.run(fc6, feed_dict={images:batch_images})
我想通过网络传递图像以进行迁移学习任务。在下面的代码中,我正在构建图形,然后获取全连接层的输出。我想批量获取输出,因为我有一个包含超过 20k 个图像的数组。
vgg.vgg_16(images)
要求 images
是图像数组。我尝试输入一个输入占位符(在查看 docs 之后)但是在加载检查点时我得到了一个错误 There are no variables to save
.
我可以一次提供 vgg.vgg_16(images)
几张图片,但我需要为每批加载检查点。我很确定有更好的方法可以做到这一点。有没有我可以看的例子或参考资料?
from tensorflow.contrib import slim
from tensorflow.contrib.slim.nets import vgg
images = np.array(read_images(val_filenames[:4], 224, 224), dtype=np.float32) # load images and resize to 224 x 224
vgg_graph = tf.Graph()
with vgg_graph.as_default():
with slim.arg_scope(vgg.vgg_arg_scope()):
outputs, end_points = vgg.vgg_16(images, is_training=False)
fc6 = end_points['vgg_16/fc6']
with tf.Session(graph=vgg_graph) as sess:
saver = tf.train.Saver()
saver.restore(sess, 'checkpoints/vgg_16.ckpt')
# pass images through the network
fc6_output = sess.run(fc6)
您可以创建一个 placeholder
并将其传递给 vgg
网络。将您的代码更改为:
images = tf.placeholder(tf.float32, shape=[batch_size, height, width, channels])
with slim.arg_scope(vgg.vgg_arg_scope()):
outputs, end_points = vgg.vgg_16(images, is_training=False)
并且在训练期间,将输入传递给网络:
fc6_output = sess.run(fc6, feed_dict={images:batch_images})