Hej、回帰ニューラルネットワークの評価
回帰問題を解決するための小さなプログラムを作成しようとしています。私のデータセットはここでは4つのランダムx(x1、x2、x3、x4)と1 yの値です。
0.634585 0.552366 0.873447 0.196890 8.75
私はトレーニングの後、私は私のモデルは損失を示すことによって、どのように良い評価したいと思いますので、できるだけ近くにy値を予測したい知っている:行の1つは、このようになります。私のミスでも優れているか、どこ
X_data = tf.placeholder(shape=[None, 4], dtype=tf.float32)
y_target = tf.placeholder(shape=[None, 1], dtype=tf.float32)
# Input neurons : 4
# Hidden neurons : 2 x 8
# Output neurons : 3
hidden_layer_nodes = 8
w1 = tf.Variable(tf.random_normal(shape=[4,hidden_layer_nodes])) # Inputs -> Hidden Layer1
b1 = tf.Variable(tf.random_normal(shape=[hidden_layer_nodes])) # First Bias
w2 = tf.Variable(tf.random_normal(shape=[hidden_layer_nodes,1])) # Hidden layer2 -> Outputs
b2 = tf.Variable(tf.random_normal(shape=[1])) # Third Bias
hidden_output = tf.nn.relu(tf.add(tf.matmul(X_data, w1), b1))
final_output = tf.nn.relu(tf.add(tf.matmul(hidden_output, w2), b2))
loss = tf.reduce_mean(-tf.reduce_sum(y_target * tf.log(final_output), axis=0))
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.001)
train = optimizer.minimize(loss)
init = tf.global_variables_initializer()
steps = 10000
with tf.Session() as sess:
sess.run(init)
for i in range(steps):
sess.run(train,feed_dict={X_data:X_train,y_target:y_train})
# PRINT OUT A MESSAGE EVERY 100 STEPS
if i%500 == 0:
print('Currently on step {}'.format(i))
training_cost = sess.run(loss, feed_dict={X_data:X_test,y_target:y_test})
print("Training cost=", training_cost)
たぶん誰かが常に私のトレーニング:) I中にエラーを表示する方法を、知っている:残念ながら、私はいつも
Training cost= nan
の最も重要な行は次のようになり可能性を受け取りますtf.estimatorでこれがどのように行われているかを知っているが、そうではない。データセットが必要な場合は、教えてください。
乾杯!
回帰における入力と出力のアクティブ化は、「線形」でなければなりません。隠れた - 'relu'か何か他の。 回帰ケースに関するあなたの損失関数を理解していません。これをチェックしてください。あなたの「ナノ」はログ機能によって引き起こされたものと思われます。 – avchauzov
ありがとうございます。私は私のアクティベーション機能とロス機能を変更しようとしましたが、私のエラーは最大7000に達していません。使用されているアクティベーション機能は現在隠れたレイヤーでreluであり、単に出力レイヤーではアクティブ化されていないので、 "final_output = tf.add tf.matmul(hidden_output、w2)、b2)」とコスト関数「tf.reduce_sum(tf.square(final_output-y_target))」を使用します。 ラベルが0と8の間でばらついているときに、どこから大きなエラーが発生するのだろうか? – Schnurrberto
今私が理解していることは、0と1の間の値しか供給できないので、Sigmoidアクティベーション機能は出力レイヤーにあってはならないということです。 私は何をしようとしていても、コスト関数は、エラーは常に非常に大きくなる! – Schnurrberto