2017-10-14 6 views
1

私の質問に答えていただきありがとうございます。私は、私が入力私のデータをTensorFlowを使用して問題があると私は出力を得続ける:Tensorflow Nueral Network not working

('Epoch ', 0, ' completed out of ', 10, 'loss:', nan) 
('Epoch ', 1, ' completed out of ', 10, 'loss:', nan) 
('Epoch ', 2, ' completed out of ', 10, 'loss:', nan) 
('Epoch ', 3, ' completed out of ', 10, 'loss:', nan) 
('Epoch ', 4, ' completed out of ', 10, 'loss:', nan) 
('Epoch ', 5, ' completed out of ', 10, 'loss:', nan) 
('Epoch ', 6, ' completed out of ', 10, 'loss:', nan) 
('Epoch ', 7, ' completed out of ', 10, 'loss:', nan) 
('Epoch ', 8, ' completed out of ', 10, 'loss:', nan) 
('Epoch ', 9, ' completed out of ', 10, 'loss:', nan) 
('Accuracy:', 1.0) 

マイX_trainデータは、各行のような数字で構成されて500〜1000の行列である:

-0.38484444, 1.4542222222 ... 

私はあなたが考えを得ることを願っています... 私のY_trainデータは、バイナリ分類(0,1)で構成されています。 len(X_train [0])は、サンプル(列)の量である1000を返します。

私の問題について明確にする必要があるかどうかはわかりません。私は自分のシンプルなTensorFlowコードを含めるつもりです。私のコードや問題についてさらに明確にする必要がある場合は、教えてください。

はあなたがtf.nn.tanhでtf.nn.reluを交換し、再びそれを訓練する、とあなたは同じ結果を得るかどうかを確認することができ、あなたの時間

import tensorflow as tf 
import pandas as pd 
import numpy as np 

da = pd.read_csv("data.csv", header=None) 
ta = pd.read_csv("BMI.csv") 

X_data = da.iloc[:, :1000] 
Y_data = np.expand_dims(ta.iloc[:, -1], axis = 1) 

X_train = X_data.iloc[:500 :,] 
X_test = X_data.iloc[500:,:] 

Y_train = Y_data[:500 :,] 
Y_test = Y_data[735:,:] 


X_train = np.array(X_train) 
X_test = np.array(X_test) 

n_nodes_hl1 = 500 
n_nodes_hl2 = 500 
n_nodes_hl3 = 500 

n_classes = 1 
batch_size = 10 

x = tf.placeholder('float', [None, len(X_train[0])]) 
y = tf.placeholder('float') 

def neural_network_model(data): 
    hidden_1_layer = {'weights': tf.Variable(tf.random_normal([len(X_train[0]), n_nodes_hl1])), 
         'biases': tf.Variable(tf.random_normal([n_nodes_hl1]))} 
    hidden_2_layer = {'weights': tf.Variable(tf.random_normal([n_nodes_hl1, n_nodes_hl2])), 
         'biases': tf.Variable(tf.random_normal([n_nodes_hl2]))} 
    hidden_3_layer = {'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, hidden_1_layer['weights']), hidden_1_layer['biases']) 
    l1 = tf.nn.relu(l1) 

    l2 = tf.add(tf.matmul(l1, hidden_2_layer['weights']), hidden_2_layer['biases']) 
    l2 = tf.nn.relu(l2) 

    l3 = tf.add(tf.matmul(l2, hidden_3_layer['weights']), hidden_3_layer['biases']) 
    l3 = tf.nn.relu(l3) 

    output = tf.matmul(l3, output_layer['weights']) + output_layer['biases'] 

    return output 


def train_nueral_network(x): 
    prediction = neural_network_model(x) 
    cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=prediction, labels=y)) 
    optimizer = tf.train.AdamOptimizer().minimize(cost) 

    hm_epochs = 10 

    with tf.Session() as sess: 
     sess.run(tf.global_variables_initializer()) 

     for epoch in range(hm_epochs): 
      epoch_loss = 0 

      i = 0 
      while i < len(X_train[0]): 
       start = i 
       end = i + batch_size 

       batch_x = np.array(X_train[start:end]) 
       batch_y = np.array(Y_train[start:end]) 

       _, c = sess.run([optimizer, cost], feed_dict= {x: batch_x, y: batch_y}) 
       epoch_loss += c 
       i += batch_size 


      print('Epoch ', epoch, ' completed out of ', hm_epochs, 'loss:', epoch_loss) 

     correct = tf.equal(tf.argmax(prediction, 1), tf.argmax(y, 1)) 
     accuracy = tf.reduce_mean(tf.cast(correct, 'float')) 
     print('Accuracy:', accuracy.eval({x:X_test, y:Y_test})) 


train_nueral_network(x) 
+0

batch_yを数行印刷して添付できますか? – amirbar

答えて

0

いただきありがとうございます。時々、ReLUは勾配の消失の問題を引き起こします。

https://ayearofai.com/rohan-4-the-vanishing-gradient-problem-ec68f76ffb9b

+0

こんにちは、ありがとうございました。私は交換して残念ながら私は同じ結果を得ている –

+0

あなたは予測とチェックを印刷できますか? –

+0

私はTensorオブジェクトの印刷方法に慣れていませんし、どの変数を印刷したいのですか? –

0

あなたn_classes=1。したがって、常に1と評価される単一のニューロンの上にsoftmaxを適用します。n_classes=2を設定する必要があります。

また、現在の設定では、使用精度評価は、常に100%正確であろう。

correct = tf.equal(tf.argmax(prediction, 1), tf.argmax(y, 1)) 

両方predictionyは常に0になりそうARGMAX形状(BATCH_SIZE,1)であるからですすべてのサンプル。

私はyを1つのホットな表記で表すとよいでしょう。一度それを行うと、コードの残りの部分はうまくいくはずです。