我是TensorFlow的新手,我在使用列表作为CNN的输入时遇到了问题。
假设我有4个列表:
TrainingImage
:这是一个包含我想要训练的所有图像的列表,每个图像我都是BGR频道,所以我使用TrainingImage.append(I)
将图像I放到此列表中。TrainingLabel
:这是在TrainingImage
中标记图片的列表,每行都是一个热门矢量。例如,如果我有3个对象(1,2,3),每个对象有2个图像(这意味着TrainingImage
有3 x 2 = 6个图像),那么我有一个标签列表,如:1,0, 0; 1,0,0; 0,1,0; 0,1,0; 0,0,1; 0,0,1 TestingImage
:包含所有待测图片的列表,类似于TrainingImage
但图像较少。TestingLabel
:所有标签为TestingImage
我不知道如何在TensorFlow中将其用作CNN的输入。我使用下面的代码,每个图像的大小为68 x 68 x 3,我有17个对象,每个对象我有64个图像用于训练,16个图像用于测试。
使用tf.Session()作为sess:
data_initializer = tf.placeholder(tf.float32, (1088, 68, 68, 3)) label_initializer = tf.placeholder(tf.float32, (1088, 17)) input_data = tf.Variable(data_initializer, trainable=False, collections=[]) input_labels = tf.Variable(label_initializer, trainable=False, collections=[]) sess.run(input_data.initializer, feed_dict={data_initializer: TrainingImage}) sess.run(input_labels.initializer, feed_dict={label_initializer: TrainingLabel})
所以现在input_data
和input_labels
是CNN的新输入,但我不确定这是正确的方法吗?我按照此TensorFlow指令https://www.tensorflow.org/programmers_guide/reading_data#preloaded_data使用上述代码,将4个列表视为变量。
答案 0 :(得分:0)
data_initializer = tf.placeholder(tf.float32,(1088, 68, 68, 3))
你使用
data_initializer = tf.placeholder(tf.float32,(None, 68, 68, 3))
这将允许您发送不同数量的图像,而不是总是发送1088图像。在某些时候你想要处理一个图像。