如何在张量流中实现RGB图像张量?
我是tensorflow的新手,我正在尝试创建堆叠稀疏降噪自动编码器模型。我已经找到了一种方法来加载我的训练(和测试)集,通过这里和github的例子,但我不能用它们作为张量来执行所需的乘法等等(此代码仅用于加载图像)如何在张量流中实现RGB图像张量?
import tensorflow as tf
import glob
import numpy as np
from PIL import Image as im
im_list = []
#LOAD ALL SETS
training_set = []
training_set = glob.glob("folder/training_set/*.jpg")
testing_set = []
testing_set = glob.glob("folder/corrupted/*.jpg")
# testing my code only for the training set
filename_queue = tf.train.string_input_producer(training_set)
reader = tf.WholeFileReader()
key, value = reader.read(filename_queue)
#data = tf.image.decode_jpeg(value)
data = tf.decode_raw(value, tf.uint8)
sess = tf.InteractiveSession()
sess.run(tf.global_variables_initializer())
#sess.run(tf.global_variables_initializer())
sess.run(tf.local_variables_initializer())
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(coord=coord)
for i in range (196):
print i
m_key = sess.run([key,data])
im_list.append(m_key[1])
coord.request_stop()
coord.join(threads)
通过使用此代码,我设法将所有图像保存为包含数据的uint8数组列表,但其大小从〜800到〜1000。我的图片大小为32x32x3,因此缺少一些东西。
我想他们另一种方式是:
filename_queue = tf.train.string_input_producer(training_set)
image_reader = tf.WholeFileReader()
_, image_file = image_reader.read(filename_queue)
imagee = tf.image.decode_jpeg(image_file)
#tf.cast(imagee, tf.float32)
sess = tf.InteractiveSession()
sess.run(tf.global_variables_initializer())
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(coord=coord)
image = sess.run(imagee)
imaginar = image.astype(np.float32)
#train_step.run(feed_dict={x: imaginar, y_: imaginar_test})
coord.request_stop()
coord.join(threads)
和IM尝试计算
y = tf.matmul(x,W) + b
h_x_s = tf.sigmoid(y)
h_x = tf.matmul(h_x_s,W_) + b_
y_xi = tf.sigmoid(h_x)
这样,我的图片是32x32x3 numpy的阵列,但我不能找到一种方法,将其保存为张量所以tf.matmul的作品。我总是得到关于我的数组的非拟合形状的错误。
# VARIABLES
x= tf.placeholder(tf.float32,[32, 32, 3])
y_ = tf.placeholder(tf.float32,[32, 32, 3])
W = tf.Variable(tf.zeros([32,32,3]))
b = tf.Variable(tf.zeros([32,32,3]))
W_ = tf.Variable(tf.zeros([32,32,3]))
b_= tf.Variable(tf.zeros([32,32,3]))
(不成功的尝试)
我应该如何加载(和解码)我的图片,并应我的变量和占位符是什么尺寸?任何帮助将非常感激!
谢谢:)
万一任何人具有相同的问题:
首先使用decode_jpeg(data, channels = 3)
(信道= 3表示RGB)或取决于你的图像类型的其它解码器。
所以你可以做的是把3D图像转换成2D矢量。例如,如果图像是(32,32,3),您的矢量应该是(1,32 * 32 * 3) - >(1,3072)。你可以做,使用
2d_vec = original_3d_image.reshape(1,-1)
您可以通过使用
2d_vec.reshape(32,32,3)
不要忘记使用它们作为输入之前,一定要规范你的数据重新设置为3D。所有你需要做的就是
2d_vec = 2d_vec/max_value_of_2d_vec
我已经在我之前,所以,如果你有任何问题,问我贴的代码改变了很多!
我建议你尝试网站上的TensorFlow教程。在TF中,您首先创建一个图然后运行它,然后您可以用多种不同的方式将信息从python输入到图中。