Reputation: 59
I've been trying to use Tensorflow, but I keep getting errors regarding the shape of my data. I'm getting my code from this YouTube tutorial: https://www.youtube.com/watch?v=PwAGxqrXSCs&list=PLQVvvaa0QuDfKTOs3Keq_kaG2P55YRn5v&index=47
My training data is this:
enc0 = np.array([[[1,2,3,4],[0,1,0,1],[-33,0,0,0],[1,1,1,1]],[[2,3,3,2],[0,0,0,0],[9,0,0,0],[0,0,0,1]]]) # shape (2,4,4)
ms0 = np.array([[1,6],[2,7]]) # shape (2,2)
My error is this:
ValueError: Dimension size must be evenly divisible by 10 but is 4 for 'gradients/Reshape_grad/Reshape' (op: 'Reshape') with input shapes: [1,4], [2].
I believe my error is occurring because of these lines:
x = tf.placeholder('float',[None,16])
y = tf.placeholder('float',[4])
enc = enc0.reshape([-1,16])
My entire code is this:
enc0 = np.array([[[1,2,3,4],[0,1,0,1],[-33,0,0,0],[1,1,1,1]],[[2,3,3,2],[0,0,0,0],[9,0,0,0],[0,0,0,1]]])
ms0 = np.array([[1,6],[2,7]])
n_nodes_hl1 = 500 # hidden layer 1
n_nodes_hl2 = 500
n_nodes_hl3 = 500
n_classes = 10
batch_size = 100 # load 100 features at a time
x = tf.placeholder('float',[None,16])
y = tf.placeholder('float',[4])
enc = enc0.reshape([-1,16])
ms = ms0
def neuralNet(data):
hl_1 = {'weights':tf.Variable(tf.random_normal([16, n_nodes_hl1])),
'biases':tf.Variable(tf.random_normal([n_nodes_hl1]))}
hl_2 = {'weights':tf.Variable(tf.random_normal([n_nodes_hl1, n_nodes_hl2])),
'biases':tf.Variable(tf.random_normal([n_nodes_hl2]))}
hl_3 = {'weights':tf.Variable(tf.random_normal([n_nodes_hl2, n_nodes_hl3])),
'biases':tf.Variable(tf.random_normal([n_nodes_hl3]))}
output_layer = {'weights':tf.Variable(tf.random_normal([n_nodes_hl3, n_classes])),
'biases':tf.Variable(tf.random_normal([n_classes]))}
l1 = tf.add(tf.matmul(data, hl_1['weights']), hl_1['biases'])
l1 = tf.nn.relu(l1)
l2 = tf.add(tf.matmul(l1, hl_2['weights']), hl_2['biases'])
l2 = tf.nn.relu(l2)
l3 = tf.add(tf.matmul(l2, hl_3['weights']), hl_3['biases'])
l3 = tf.nn.relu(l3)
ol = tf.matmul(l3, output_layer['weights']) + output_layer['biases']
return ol
def train(x):
prediction = neuralNet(x)
print prediction
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=prediction,labels=y))
optimizer = tf.train.AdamOptimizer().minimize(cost) # learning rate = 0.001
# cycles of feed forward and backprop
num_epochs = 15
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for epoch in range(num_epochs):
epoch_loss = 0
for _ in range(int(enc.shape[0])):
epoch_x,epoch_y = enc,ms
_,c = sess.run([optimizer,cost],feed_dict={x:epoch_x,y:epoch_y})
epoch_loss += c
print 'Epoch', epoch + 1, 'completed out of', num_epochs, '\nLoss:',epoch_loss,'\n'
correct = tf.equal(tf.argmax(prediction,1),tf.argmax(y,1))
accuracy = tf.reduce_mean(tf.cast(correct,'float'))
print 'Accuracy', accuracy.eval({x:enc, y:ms})
train(x)
Any help with the error would be much appreciated.
Upvotes: 0
Views: 1061
Reputation: 36146
The reason is that you are generating n_classes
predictions from the network (n_classes
is 10), while comparing it with 4 values in your y
placeholder. It should be enough to use
y = tf.placeholder('float', [10])
and then actually feed 10 values to the placeholder.
Upvotes: 1