2017-12-07 10 views
0

Tensor 흐름에서 신경망 모델을 구현하려고하지만 placeholder의 모양에 문제가있는 것 같습니다. 나는 TF가 처음이므로 간단한 오해 일 수 있습니다. 내 코드 및 데이터 샘플은 다음과 같습니다.Tensor-flow에서 신경 모델을 구현

_data=[[0.4,0.5,0.6,1],[0.7,0.8,0.9,0],....] 

데이터는 4 열의 배열로 구성되며 각 배열의 마지막 열은 레이블입니다. 내가 라벨 0, 라벨 1 레이블로 각 배열을 분류 할 2. 내 코드를 실행 한 후 다음과 같은 오류 메시지를 받았습니다

import tensorflow as tf 
import numpy as np 

_data = datamatrix 
X = tf.placeholder(tf.float32, [None, 3]) 
W = tf.Variable(tf.zeros([3, 1])) 
b = tf.Variable(tf.zeros([3])) 

init = tf.global_variables_initializer() 
Y = tf.nn.softmax(tf.matmul(X, W) + b) 

# placeholder for correct labels 
Y_ = tf.placeholder(tf.float32, [None, 1]) 

# loss function 
import time 
start=time.time() 

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(1000): 
    # load batch of images and correct answers 
    batch_X, batch_Y = [x[:3] for x in _data[:2000]],[x[-1] for x in _data[:2000]] 
    train_data={X: batch_X, Y_: batch_Y} 

    # train 
    sess.run(train_step, feed_dict=train_data) 

# success ? 
a,c = sess.run([accuracy, cross_entropy], feed_dict=train_data) 

:

ValueError: Cannot feed value of shape (2000,) for Tensor 'Placeholder_1:0', which has shape '(?, 1)' 

내 원하는 출력의 성능해야한다 교차 엔트로피를 사용하는 모델; 아래의 코드 라인의 정확도 값 :

a,c = sess.run([accuracy, cross_entropy], feed_dict=train_data) 

나는 또한 모델 또는 내 데이터에 더 적합한 모델을 개선하는 방법에 대한 어떤 제안을 감사하겠습니다.

답변

1

모양이 Placeholder_1:0Y_이고 입력 데이터 batch_Y이 오류 메시지에 지정된대로 일치하지 않습니다. 1 차원 대 2 차원 배열을 주목하십시오.

그래서 당신이 1-D 플레이스 홀더를 정의해야 하나 :

Y_ = tf.placeholder(tf.float32, [None]) 

또는 2-D 데이터 준비 :

batch_X, batch_Y = [x[:3] for x in _data[:2000]],[x[-1:] for x in _data[:2000]] 
+0

좋은 물건을, 솔루션 작동합니다. 감사. – user2274879

+0

당신은 오신 것을 환영합니다. 이 질문에 답변 해 주시겠습니까? – THN