gpt4 book ai didi

python - 将预测的张量保存到 TensorFlow 中的图像 - 图形最终确定

转载 作者:行者123 更新时间:2023-11-28 18:13:27 24 4
gpt4 key购买 nike

我能够使用自己的数据在 TensorFlow 中训练模型。模型的输入和输出是图像。我现在尝试获取预测的输出并将其保存到 png 图像文件中以查看发生了什么。不幸的是,在运行我创建的用于测试预测的以下函数时出现错误。我的目标是保存也是图像的预测,以便我可以使用普通图像查看器打开它。

更多的代码。我主要是在创建一个估算器

def predict_element(my_model, features):
eval_input_fn = tf.estimator.inputs.numpy_input_fn(
x=features,
num_epochs=1,
shuffle=False)

eval_results = my_model.predict(input_fn=eval_input_fn)

predictions = eval_results.next() #this returns a dict with my tensors
prediction_tensor = predictions["y"] #get the tensor from the dict

image_tensor = tf.reshape(prediction_tensor, [IMG_WIDTH, -1]) #reshape to a matrix due my returned tensor is a 1D flat one
decoded_image = tf.image.encode_png(image_tensor)
write_image = tf.write_file("output/my_output_image.png", decoded_image)

with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(write_image))

def get_input():
filename_dataset = tf.data.Dataset.list_files("features/*.png")
label_dataset = tf.data.Dataset.list_files("labels/*.png")

# Make a Dataset of image tensors by reading and decoding the files.
image_dataset = filename_dataset.map(lambda x: tf.cast(tf.image.decode_png(tf.read_file(x), channels=1),tf.float32))
l_dataset = label_dataset.map(lambda x: tf.cast(tf.image.decode_png(tf.read_file(x),channels=1),tf.float32))

image_reshape = image_dataset.map(lambda x: tf.reshape(x, [IM_WIDTH * IM_HEIGHT]))
label_reshape = l_dataset.map(lambda x: tf.reshape(x, [IM_WIDTH * IM_HEIGHT]))

iterator = image_reshape.make_one_shot_iterator()
iterator2 = label_reshape.make_one_shot_iterator()

next_img = iterator.get_next()
next_lbl = iterator2.get_next()

features = []
labels = []
# read all 10 images and labels and put it in the array
# so we can pass it to the estimator
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for i in range(10):
t1, t2 = sess.run([next_img, next_lbl])
features.append(t1)
labels.append(t2)

return {"x": np.array(features)}, np.array(labels)

def main(unused_argv):
features, labels = get_input() # creating the features dict {"x": }
my_estimator = tf.estimator.Estimator(model_fn=my_cnn_model, model_dir="/tmp/my_model")

predict_element(my_estimator, features)

错误是

Graph is finalized and cannot be modified

通过一些简单的 print() 语句,我可以看到用

eval_results = my_model.predict(input_fn=eval_input_fn)

可能是最终确定图表的那个。我绝对不知道该怎么做或在哪里寻找解决方案。如何保存输出?

我在我的 model_fn 中试过这个:

#the last layer of my network is dropout
predictions = {
"y": dropout
}

if mode == tf.estimator.ModeKeys.PREDICT:
reshape1 = tf.reshape(dropout, [-1,IM_WIDTH, IM_HEIGHT])
sliced = tf.slice(reshape1, [0,0,0], [1, IM_WIDTH, IM_HEIGHT])
encoded = tf.image.encode_png(tf.cast(sliced, dtype=tf.uint8))
outputfile = tf.write_file(params["output_path"], encoded)
return tf.estimator.EstimatorSpec(mode=mode, predictions=predictions)

我的问题是我无法传回“outputfile”节点以便我可以使用它。

最佳答案

好吧,您的图表已经完成,无法修改。您可以将此 tensorflow 操作添加到您的模型(在运行它之前)或简单地编写一些 python 代码来单独保存图像(不使用 tensorflow)。也许我会找到我的一些旧代码作为示例。

您还可以创建第二个图,然后您可以在不更改现有模型图的情况下使用 tensorflow。

您必须区分图形节点和评估对象。 tf.reshape 不将数组作为输入,而是将图形节点作为输入。 https://www.tensorflow.org/programmers_guide/graphs

关于python - 将预测的张量保存到 TensorFlow 中的图像 - 图形最终确定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49918271/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com