#python-3.x #tensorflow #neural-network
#python-3.x #тензорный поток #нейронная сеть
Вопрос:
У меня есть некоторая матрица из цветных изображений (размер 100 * 100), и я получаю ошибку при попытке запустить свою нейронную сеть :
def simple_nn(X_training, Y_training, X_test, Y_test):
input = 100*100*3
batch_size = 25 #not used
X = tf.placeholder(tf.float32, [1, 100, 100, 3])
W = tf.Variable(tf.zeros([input, 2]))
b = tf.Variable(tf.zeros([2]))
init = tf.global_variables_initializer()
# model
Y = tf.nn.softmax(tf.matmul(tf.reshape(X, [-1, input]), W) b)
# placeholder for correct labels
Y_ = tf.placeholder(tf.float32, [None, 2])
# loss function
cross_entropy = -tf.reduce_sum(Y_ * tf.log(Y))
# % of correct answers found in batch
is_correct = tf.equal(tf.argmax(Y,1), tf.argmax(Y_,1))
accuracy = tf.reduce_mean(tf.cast(is_correct, tf.float32))
optimizer = tf.train.GradientDescentOptimizer(0.003)
train_step = optimizer.minimize(cross_entropy)
sess = tf.Session()
sess.run(init)
for i in range(len(X_training)):
# st = batch_size * i
# end = st batch_size - 1
batch_X, batch_Y = X_training[i], Y_training[i]
train_data={X: batch_X, Y_: batch_Y}
sess.run(train_step, feed_dict=train_data)
a,c = sess.run([accuracy, cross_entropy], feed_dict=train_data)
# success on test data ?
test_data={X: X_test, Y_: Y_test}
a,c = sess.run([accuracy, cross_entropy], feed=test_data)
Моя ошибка :
Traceback (most recent call last):
File "neural_net.py", line 90, in <module>
simple_nn(X_training, Y_training, X_test, Y_test)
File "neural_net.py", line 71, in simple_nn
sess.run(train_step, feed_dict=train_data)
File "/home/.../venv/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 929, in run
run_metadata_ptr)
File "/home/.../venv/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1128, in _run
str(subfeed_t.get_shape())))
ValueError: Cannot feed value of shape (100, 100, 3) for Tensor 'Placeholder:0', which has shape '(1, 100, 100, 3)'
Я не понимаю, почему я получаю эту ошибку, поскольку мои пакеты имеют размер 1, я понятия не имею, как изменить форму, чтобы устранить эту ошибку.
И если я заменю эту строку :
X = tf.placeholder(tf.float32, [1, 100, 100, 3])
Этим (без «1») :
X = tf.placeholder(tf.float32, [1, 100, 100, 3])
Я получаю эту ошибку :
ValueError: Cannot feed value of shape (2,) for Tensor 'Placeholder_1:0', which has shape '(?, 2)'
Ответ №1:
Я решаю свою (глупую) проблему, я заменил :
batch_X, batch_Y = X_training[i], Y_training[i]
Этим :
batch_X, batch_Y = [X_training[i]], [Y_training[i]]
Итак, у меня есть еще одно измерение в моих пакетах