我无法使我训练有素的神经网络正常工作。 我想将一个numpy数组(本质上是一张图片)喂入训练有素的网络。
with tf.Session() as sess:
# Unpersists graph from file
with tf.gfile.FastGFile(graph_path, 'rb') as f:
graph_def = tf.GraphDef()
graph_def.ParseFromString(f.read())
_ = tf.import_graph_def(graph_def, name='')
softmax_tensor = sess.graph.get_tensor_by_name('y_pred:0')
predictions = sess.run(softmax_tensor,
{'DecodeJpeg/contents:0': image_data})
我总是会收到此错误:
TypeError:无法将feed_dict键解释为张量:名称'DecodeJpeg / contents:0'表示不存在的张量。图中不存在“ DecodeJpeg / contents”操作。
我已经为该feed-dict尝试了许多不同的键,但是我做对了。 我使用数据集API训练了网络,这意味着我没有可以填的tf.placeholder。相反,网络正在通过包含张量对象的数据集上的迭代器来获取数据。 tfrecord文件是使用Google的this script创建的
我的模型功能开始:
input_layer = tf.reshape(features["image"], [-1, _DEFAULT_IMAGE_SIZE, _DEFAULT_IMAGE_SIZE, 3])
节选摘录:
predictions = {
# Generate predictions (for PREDICT and EVAL mode)
"classes": tf.argmax(input=logits, axis=1),
# Add `softmax_tensor` to the graph. It is used for PREDICT and by the
# `logging_hook`.
"probabilities": tf.nn.softmax(logits, name="y_pred")
}
if mode == tf.estimator.ModeKeys.PREDICT:
return tf.estimator.EstimatorSpec(mode=mode, predictions=predictions)
# Calculate Loss (for both TRAIN and EVAL modes)
onehot_labels = tf.one_hot(indices=tf.cast(labels, tf.int32), depth=2)
loss = tf.losses.softmax_cross_entropy(onehot_labels=onehot_labels, logits=logits)
这是Topology
如何获得这些预测/如何将图像馈送到网络?
答案 0 :(得分:0)
image_data
应该是张量。您可以使用以下片段将jpeg图像读取为张量(image_file
是jpeg文件的位置)
# decode the JPEG image as tensor
image_data = tf.cast(tf.image.decode_jpeg(image_file), tf.float32)
答案 1 :(得分:0)
您可以给输入层起一个名字,就像对softmax张量所做的那样按名称检索它,然后将其输入numpy数组。看起来是这样的:
# First, name your input tensor
input_layer = tf.reshape(features["image"], [-1, _DEFAULT_IMAGE_SIZE, _DEFAULT_IMAGE_SIZE, 3], name='input_layer')
...
predictions = sess.run('y_pred:0',
{'input_layer:0': image_data})
只要image_data的形状为[1,_DEFAULT_IMAGE_SIZE,_DEFAULT_IMAGE_SIZE,3],这应该可以工作
关于为什么无法按名称访问DecodedJpeg张量的解释是tf.Dataset运算符不在主图中。