私はテンソルフローで基本的なニューラルネットワークを実装しようとしていますが、入力は(x、y、z)の1 /ゼロのランダムデータですが、 x = 1のときはいつでも、そうでなければ0を出力する。テンソルフローの基本ニューラルネット
私のテストデータが出力[1,0,0]は、私はここで本当にわからいただきました間違ってないんだけどなければならないしかしこれは
[-0.37119362]
[-0.23264697]
[-0.14701667]
を出力
import tensorflow as tf
import numpy as np
x_data = np.array([[0,0,1],
[0,1,1],
[1,0,0],
[0,1,0],
[1,1,1],
[0,1,1],
[1,1,1]])
x_test = np.array([[1,1,1], [0,1,0], [0,0,0]])
y_data = np.array([0,0,1,0,1,0,1])
iters = 1000
learning_rate = 0.1
weights = {
'w1': tf.Variable(tf.random_normal([3, 5])),
'w2': tf.Variable(tf.random_normal([5, 1])),
}
bias = {
'b1': tf.Variable(tf.random_normal([5])),
'b2': tf.Variable(tf.random_normal([1])),
}
def predict(x, weights, bias):
l1 = tf.add(tf.matmul(x, weights['w1']), bias['b1'])
l1 = tf.nn.sigmoid(l1)
out = tf.add(tf.matmul(l1, weights['w2']), bias['b2'])
return out
x = tf.placeholder(tf.float32, shape=(None,3))
y = tf.placeholder(tf.float32, shape=(None))
pred = predict(x, weights, bias)
cost = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=pred, labels=y))
optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate).minimize(cost)
init = tf.global_variables_initializer()
# graph
with tf.Session() as sess:
sess.run(init)
for i in range(0, iters):
_, c = sess.run([optimizer, cost], feed_dict={x: x_data, y: y_data})
if i % 100 == 0:
print("cost: " + str(c))
print(sess.run(weights['w1']))
print(sess.run(pred, feed_dict={x: x_test}))
自分のネットワークコードであります。私は、ハイパーパラメータで遊んでみて、stackoverflowを見てきました。私はまた、コスト関数としてsoftmax_cross_entropyを使用しようとしましたが、ロジットがラベルと同じ形ではないというエラーが表示されます。
これは私が期待しているものが出力されない理由を知っていますか?
I相関関係を学習しない理由を教えてもらえませんが、クロスエントロピーを計算する前にシグモイドを実行しているので、おそらく最後の行に予測のシグモイドを出力して、出力を比較可能にします: 'print(sess.run(tf.nn.sigmoid(pred)、feed_dict = {x:x_test}))'。これにより、少なくとも肯定的な結果が得られます。 – ml4294