【发布时间】:2017-04-06 12:09:58
【问题描述】:
我使用 128 x 128 x 128 ndarrays 作为 cnn 的输入:
# input arrays
x = tf.placeholder(tf.float32, [None, 128, 128, 128, 1])
每个ndarray没有颜色通道数据,所以我用了:
data = np.reshape(data, (128, 128, 128, 1))
为了让它最初适合占位符。但是现在我收到了这个错误:
Traceback (most recent call last):
File "tfvgg.py", line 287, in <module>
for i in range(10000 + 1): training_step(i, i % 100 == 0, i % 20 == 0)
File "tfvgg.py", line 277, in training_step
a, c = sess.run([accuracy, cross_entropy], {x: batch_X, y: batch_Y})
File "/home/entelechy/tfenv/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 717, in run
run_metadata_ptr)
File "/home/entelechy/tfenv/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 894, in _run
% (np_val.shape, subfeed_t.name, str(subfeed_t.get_shape())))
ValueError: Cannot feed value of shape (128, 128, 128, 1) for Tensor 'Placeholder:0', which has shape '(?, 128, 128, 128, 1)'
我对占位符的工作方式感到困惑,因为我认为第一个参数是批量大小。通过使用None,我认为占位符将采用任意数量的 (128, 128, 128, 1) 输入。因为这是一个 3d 网络,如果我将占位符更改为 (128, 128, 128, 1),则会在第一个 conv3d 层抛出一个错误,因为缺少参数。
关于占位符参数传递,我缺少什么?
编辑: (train_data 是一个列表列表,每个列表都是 [ndarray, label])
这是网络的初始化:
def training_step(i, update_test_data, update_train_data):
for a in range(len(train_data)):
batch = train_data[a]
batch_X = batch[0]
batch_Y = batch[1]
# learning rate decay
max_learning_rate = 0.003
min_learning_rate = 0.0001
decay_speed = 2000.0
learning_rate = min_learning_rate + (max_learning_rate - min_learning_rate) * math.exp(-i / decay_speed)
if update_train_data:
a, c = sess.run([accuracy, cross_entropy], {x: batch_X, y: batch_Y})
print(str(i) + ": accuracy:" + str(a) + " loss: " + str(c) + " (lr:" + str(learning_rate) + ")")
if update_test_data:
a, c = sess.run([accuracy, cross_entropy], {x: test_data[0], y: test_data[1]})
print(str(i) + ": ********* epoch " + " ********* test accuracy:" + str(a) + " test loss: " + str(c))
sess.run(train_step, {x: batch_X, y: batch_Y, lr: learning_rate})
for i in range(10000 + 1): training_step(i, i % 100 == 0, i % 20 == 0)
【问题讨论】:
-
您不应该将数据整形为大小
(1, 128, 128, 128, 1),即批量大小 = 1?
标签: tensorflow