使用tf.map\u fn-Python/TensorFlow将tensor另存为JPEG图像
我有一个函数,它返回一个名为layer-images的变量,格式如下:使用tf.map\u fn-Python/TensorFlow将tensor另存为JPEG图像,python,python-2.7,image-processing,tensorflow,tensor,Python,Python 2.7,Image Processing,Tensorflow,Tensor,我有一个函数,它返回一个名为layer-images的变量,格式如下: <tf.Tensor 'Conv2D_1:0' shape=(?, 16, 16, 1) dtype=float32> And in session=tf.session() 我现在的疑问是如何配置它来保存它们? 我试过这个: # That means it will only scroll through my 300 images # And it's these 300 images that I wan
<tf.Tensor 'Conv2D_1:0' shape=(?, 16, 16, 1) dtype=float32>
And in session=tf.session()
我现在的疑问是如何配置它来保存它们?
我试过这个:
# That means it will only scroll through my 300 images
# And it's these 300 images that I want to save
x_batch, y_true_batch = next_batch_size(train_batch_size)
feed_dict_train = {x: x_batch, y_true: y_true_batch}
result = session.run(images_encode, feed_dict=feed_dict_train)
format_str = ('%s.jpeg')
fr = format_str % datetime.now()
f = open(fr, "wb+")
f.write(result.eval())
f.close()
但我得到了以下错误:
InvalidArgumentError (see above for traceback): TensorArray dtype is uint8 but Op is trying to write dtype string.
[[Node: map_5/while/TensorArrayWrite/TensorArrayWriteV3 = TensorArrayWriteV3[T=DT_STRING, _class=["loc:@map_5/TensorArray_1"], _device="/job:localhost/replica:0/task:0/cpu:0"](map_5/while/TensorArrayWrite/TensorArrayWriteV3/Enter, map_5/while/Identity, map_5/while/EncodeJpeg, map_5/while/Identity_1)]]
我的占位符是:
# Placeholder variable for the input images
x = tf.placeholder(tf.float32, shape=[None, img_size_flat], name='x')
# Reshape 'x'
x_image = tf.reshape(x, [-1, img_size, img_size, num_channels])
# Placeholder variable for the true labels associated with the images
y_true = tf.placeholder(tf.float32, shape=[None, num_classes], name='y_true')
你的工作差不多完成了。类型必须是
tf.string
:
这会产生一个嘈杂的图像:
import tensorflow as tf
import numpy as np
noise = np.random.randn(3, 128, 128, 1).astype(np.float32) * 255
# your data
layer = tf.convert_to_tensor(noise)
images = tf.image.convert_image_dtype(layer, tf.uint8)
images_encode = tf.map_fn(lambda x: tf.image.encode_jpeg(x),
images, dtype=tf.string)
def write_jpg(buf, fn):
with open(fn, 'wb') as f:
f.write(encoded_jpegs[0])
with tf.Session() as sess:
encoded_jpegs = sess.run(images_encode)
for k, jpg in enumerate(encoded_jpegs):
with open("test%03i.jpg" % k, 'wb') as f:
f.write(jpg)
这很有帮助。但这仍然不是我需要的,我需要分别保存300个图像中的每一个,例如:
test1.jpg,test2.jpg,…,test300.jpg
。我需要它们保持原样,没有噪音。我们的想法是在以后生成这些图像的直方图。您可以始终浓缩这些图像,或者使用tf.py_funcI添加的循环写入所有图像,并且它们没有噪声。我只是以噪音为例。层
可以是任何图像!我收到以下错误:invalidargumeinterror:您必须用dtype float输入占位符'x'张量的值
,然后使用sess.run(images\u encode,{x:numpy\u array})
请告诉我您是否仍然需要帮助,或者答案是否解决了您的问题。@Patwie,很抱歉耽搁了,我最近很忙!
# Placeholder variable for the input images
x = tf.placeholder(tf.float32, shape=[None, img_size_flat], name='x')
# Reshape 'x'
x_image = tf.reshape(x, [-1, img_size, img_size, num_channels])
# Placeholder variable for the true labels associated with the images
y_true = tf.placeholder(tf.float32, shape=[None, num_classes], name='y_true')
import tensorflow as tf
import numpy as np
noise = np.random.randn(3, 128, 128, 1).astype(np.float32) * 255
# your data
layer = tf.convert_to_tensor(noise)
images = tf.image.convert_image_dtype(layer, tf.uint8)
images_encode = tf.map_fn(lambda x: tf.image.encode_jpeg(x),
images, dtype=tf.string)
def write_jpg(buf, fn):
with open(fn, 'wb') as f:
f.write(encoded_jpegs[0])
with tf.Session() as sess:
encoded_jpegs = sess.run(images_encode)
for k, jpg in enumerate(encoded_jpegs):
with open("test%03i.jpg" % k, 'wb') as f:
f.write(jpg)