0
我想訓練NN來預測sqrt
的一個數字,在tensorflow
以下是我的代碼,但是損失不能降到0,並且結果不正確,是什麼問題?如何訓練神經網絡來預測Tensorflow中一個數的SQRT?
#!/usr/bin/env python
import numpy as np
import tensorflow as tf
if __name__ == '__main__':
dimension = 1
X = tf.placeholder(tf.float32, [None, dimension])
W = tf.Variable(tf.random_normal([dimension, 100], stddev=0.01))
b = tf.Variable(tf.zeros([100]))
h1 = tf.nn.relu(tf.matmul(X, W) + b)
W2 = tf.Variable(tf.random_normal([100, 50], stddev=0.01))
b2 = tf.Variable(tf.zeros([50]))
h2 = tf.nn.relu(tf.matmul(h1, W2) + b2)
W3 = tf.Variable(tf.random_normal([50, 1], stddev=0.01))
b3 = tf.Variable(tf.zeros([1]))
y = tf.nn.relu(tf.matmul(h2, W3) + b3)
Y = tf.placeholder(tf.float32, [None, dimension])
cost = tf.reduce_mean(tf.pow(y - Y, 2))
optimizer = tf.train.GradientDescentOptimizer(0.01).minimize(cost)
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
for epoch in range(1000):
sx = np.random.rand(1000, 1)
sy = np.sqrt(sx)
sess.run(optimizer, feed_dict={X: sx, Y: sy})
c = sess.run(cost, feed_dict={X: sx, Y: sy})
print("Epoch:", '%04d' % (epoch + 1), "cost=", "%.03f" % c)
sx = np.random.rand(10000, 1)
sy = np.sqrt(sx)
tc = sess.run(cost, feed_dict={X: sx, Y: sy})
print("Testing cost=", tc)
sx = np.array([[0.01], [0.5]])
sy = np.sqrt(sx)
print sy
print sess.run(y, feed_dict={X: sx, Y: sy})
print sess.run(cost, feed_dict={X: sx, Y: sy})
這裏是輸出,就不能得到正確的結果:
...
('Epoch:', '0999', 'cost=', '0.502')
('Epoch:', '1000', 'cost=', '0.499')
('Testing cost=', 0.49828479)
[[ 0.1 ]
[ 0.70710678]]
[[ 0.]
[ 0.]]
0.255
@prime_tang,這樣做可以幫助您? – hars
所以你基本上編輯了OP,質疑你認爲合適的方式。目前還不清楚你的意思:「我想用NN訓練sqrt」。嘗試向所有使用神經網絡平均值的機器學習的人解釋什麼是訓練平方根。 –
Hi @SalvadorDali,我想prime_tang想知道,「可以訓練神經網絡來計算任何數字的平方根?怎麼樣?」。它就像任何其他函數(xor/xnor)的近似值。 – hars