如何使用numpy数组作为Tensorflow CNN的输入而没有不匹配的维度

时间:2017-09-15 04:11:28

标签: python arrays numpy tensorflow

我有一个tensorflow convnet的输入作为rank-4张量(32,32,3,73257)(73257来自imgs的数量)是numpy数组,但我的x输入的占位符变量是2-d, (无,3072)。 3072来自img height x img width x channels。我的问题是,如何重塑或使用图像以便与占位符兼容?

P.S。这些图像来自SVHN裁剪的32x32数据集

images = np.array(features, dtype=np.float32)
...
x = tf.placeholder(tf.float32, shape=[None, 3072])
...
for _ in range(1000):
  batch = next_batch(50, images, labels)
  train_step.run(feed_dict={x: batch[0], y_: batch[1]})
...
with tf.Session() as sess:
  sess.run(tf.global_variables_initializer())
  for i in range(20000):
    batch = next_batch(50, images, labels)
    if i % 100 == 0:
      train_accuracy = accuracy.eval(feed_dict={
          x: batch[0], y_: batch[1], keep_prob: 1.0})
      print('step %d, training accuracy %g' % (i, train_accuracy))
    train_step.run(feed_dict={x: images, y_: labels, keep_prob: 0.5})

1 个答案:

答案 0 :(得分:3)

假设您有73257个图像32×32像素,保持3个波段(例如rgb)。你可以做一个

input = tf.transpose(input, [3, 0, 1, 2])

将最后一个维度放在首位。张量应该看起来像(73257,32,32,3)。

然后做

input = tf.reshape(input, [-1, 3072])

减少尺寸。张量应该看起来像(73257,3072)。