2017-12-08 10 views
1

178 개 요소의 데이터 세트가 있고 각 요소에는 13 개의 기능과 1 개의 레이블이 있습니다. 레이블이 핫 배열로 저장됩니다. 내 훈련 데이터 세트는 158 가지 요소로 구성됩니다. 여기신경망 모델에 어떤 문제가 있습니까?

내 모델이 모습입니다 :

x = tf.placeholder(tf.float32, [None,training_data.shape[1]]) 
y_ = tf.placeholder(tf.float32, [None,training_data_labels.shape[1]]) 

node_1 = 300 
node_2 = 300 
node_3 = 300 
out_n = 3 

#1 
W1 = tf.Variable(tf.random_normal([training_data.shape[1], node_1])) 
B1 = tf.Variable(tf.random_normal([node_1])) 
y1 = tf.add(tf.matmul(x,W1),B1) 
y1 = tf.nn.relu(y1) 

#2 
W2 = tf.Variable(tf.random_normal([node_1, node_2])) 
B2 = tf.Variable(tf.random_normal([node_2])) 
y2 = tf.add(tf.matmul(y1,W2),B2) 
y2 = tf.nn.relu(y2) 

#3 
W3 = tf.Variable(tf.random_normal([node_2, node_3])) 
B3 = tf.Variable(tf.random_normal([node_3])) 
y3 = tf.add(tf.matmul(y2,W3),B3) 
y3 = tf.nn.relu(y3) 

#output 
W4 = tf.Variable(tf.random_normal([node_3, out_n])) 
B4 = tf.Variable(tf.random_normal([out_n])) 
y4 = tf.add(tf.matmul(y3,W4),B4) 
y = tf.nn.softmax(y4) 

loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y)) 
optimizer = tf.train.GradientDescentOptimizer(0.01).minimize(loss) 

with tf.Session() as sess: 
    sess.run(tf.global_variables_initializer()) 
    for i in range(200): 
     sess.run(optimizer,feed_dict={x:training_data, y_:training_data_labels}) 

    correct = tf.equal(tf.argmax(y_, 1), tf.argmax(y, 1)) 
    accuracy = tf.reduce_mean(tf.cast(correct, 'float')) 
    print('Accuracy:',accuracy.eval({x:eval_data, y_:eval_data_labels})) 

하지만 정확도가 매우 낮은, 나는 약간 높은 숫자로 증가 범위 (200)를 시도했지만 여전히 낮은 남아있다.

결과를 개선하려면 어떻게해야합니까?

+0

문제는 초기화와 관련이 있습니다. 이 재현을 위해 훈련 데이터를 제공하십시오 – Maxim

+0

@Skam 숙제입니다 .. –

+0

왜 argmax 메소드가 필요합니까? 나는 argmax 메소드를 모두 삭제해야한다고 생각한다. – eneski

답변

2

문제는 softmax가 y4 인 다음이를 tf.nn.softmax_cross_entropy_with_logits으로 전달하는 것입니다. 이 오류는 문서에 대한 메모가 softmax_cross_entropy_with_logits 위해 실제로 거기에 충분히 일반적입니다 :

는 코드의 나머지 부분이 잘 보이는
WARNING: This op expects unscaled logits, since it performs a softmax on logits internally 
for efficiency. Do not call this op with the output of softmax, as it will produce 
incorrect results. 

, 그래서 그냥 yy4을 교체하고 y = tf.nn.softmax(y4) 제거.