파이썬 질문입니다..

12개의 박스안에 손으로 그린 이미지를 넣으려고 하는데요

ValueError: Cannot feed value of shape (100,) for Tensor ‘Placeholder_130:0’, which has shape '(?, 48)

라는 오류가 뜹니다… 어떻게고쳐야하나요??

import numpy as np
import matplotlib.pyplot as plt

from emnist import extract_training_samples
train_images, train_labels = extract_training_samples('balanced')
from emnist import extract_test_samples
test_images, test_labels = extract_test_samples('balanced')

emnist = input_data.read_data_sets("./data/EMNIST/")

X = tf.placeholder(tf.float32, [None, 784])
Y = tf.placeholder(tf.float32, [None, 48])
keep_prob = tf.placeholder(tf.float32)

train_images = np.reshape(train_images, (-1, 784))
train_images.shape

test_images = np.reshape(test_images, (-1, 784))
test_images.shape

train_labels = np.eye(47)[train_labels]
train_labels.shape

test_labels = np.eye(47)[test_labels]
test_labels.shape

W1 = tf.Variable(tf.random_normal([784, 256], stddev=0.01))
L1 = tf.nn.relu(tf.matmul(X, W1))

L1 = tf.nn.dropout(L1, keep_prob)
W2 = tf.Variable(tf.random_normal([256, 256], stddev=0.01))
L2 = tf.nn.relu(tf.matmul(L1, W2))
L2 = tf.nn.dropout(L2, keep_prob)
W3 = tf.Variable(tf.random_normal([256, 48], stddev=0.01))
model = tf.matmul(L2, W3)
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=model, labels=Y))
optimizer = tf.train.AdamOptimizer(0.001).minimize(cost)

init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)


batch_size = 100
total_batch = int(emnist.train.num_examples / batch_size)

for epoch in range(30):
    total_cost = 0
    for i in range(total_batch):
        batch_xs, batch_ys = emnist.train.next_batch(batch_size)
        _, cost_val = sess.run([optimizer, cost], feed_dict={X: batch_xs, Y: batch_ys, keep_prob: 0.8})
        total_cost += cost_val
        print('Epoch:', '%04d' % (epoch + 1),
            'Avg. cost =', '{:.3f}'.format(total_cost / total_batch))
print('최적화 완료!')```

질문글 작성법

Please read this first and think about your code one more

1 Like

구글링 ㄱㄱ

1 Like

구글링 다 해봤는데 모르겠어서요,

https://tensorflowkorea.gitbooks.io/tensorflow-kr/content/g3doc/get_started/basic_usage.html

tensorflow 안써봐서 저도 잘 모르겠는데

sess.run에 해당 자리에 optimizer, cost가 들어가면 안되는거 같습니다.

코드는 괜찮은데 제 생각엔 Input이 이상한 것 같습니다.

오류 메시지를 읽어보면 값이 (100,)이 왔다고 했는데 1번째 Axis는 100인데 2번째 Axis가 안보이네용?

이렇게 설정했으니깐 아마 Y의 두 번째 Axis(column)가 48이길 기대했는데 이상한 값이 와서 오류난 것 같습니다.

제공해주고 있는 feed를 확인해보세요.

2번째 axis가 어떤걸의미하는건가요??

(a,b)라고 할 때 b입니다
위 경우엔 b가 48이 아니라 오류가 난 것 같다고 말한겁니다.