Hej,회귀 신경망 평가
회귀 문제를 해결하기 위해 작은 프로그램을 작성하려고합니다. 내 데이터 세트는 여기에 4 개의 무작위 x (x1, x2, x3 및 x4) 및 1 y 값입니다. 행 중 하나는 다음과 같습니다
0.634585 0.552366 0.873447 0.196890 8.75
내가 나의 모델이 손실을 보여주는 것입니다 얼마나 잘 평가하고 싶은 훈련 후 수 있도록 가능한 한 가까운 y 값을 예측하려는 알고있다. 불행하게도 나는 항상
Training cost= nan
을받는 가장 중요한 선이 될 수있다 : 내 실수가 더 나은 또는 어디
이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 이것이 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
지금 내가 이해하고있는 것은 Sigmoid 활성화 함수가 출력 레이어에 없어야한다는 것입니다. 0과 1 사이의 값만을 제공 할 수 있습니다. 그러나 무엇을 시도하든 관계없이 활성화 함수로 변경하거나 비용 함수, 오류는 항상 엄청나게 커집니다! – Schnurrberto