最近我开始玩神经网络.我试图AND用Tensorflow 实现一个门.我无法理解何时使用不同的成本和激活功能.这是一个基本的神经网络,只有输入和输出层,没有隐藏层.
首先,我尝试以这种方式实现它.正如您所看到的,这是一个糟糕的实现,但我认为它完成了工作,至少在某种程度上.所以,我只尝试了真正的输出,没有一个真正的输出.对于激活函数,我使用了sigmoid函数,对于成本函数,我使用了平方误差成本函数(我认为它称之为,如果我错了,请纠正我).
我尝试使用ReLU和Softmax作为激活功能(具有相同的成本函数),但它不起作用.我弄清楚他们为什么不工作.我也尝试过使用交叉熵成本函数的sigmoid函数,它也不起作用.
import tensorflow as tf
import numpy
train_X = numpy.asarray([[0,0],[0,1],[1,0],[1,1]])
train_Y = numpy.asarray([[0],[0],[0],[1]])
x = tf.placeholder("float",[None, 2])
y = tf.placeholder("float",[None, 1])
W = tf.Variable(tf.zeros([2, 1]))
b = tf.Variable(tf.zeros([1, 1]))
activation = tf.nn.sigmoid(tf.matmul(x, W)+b)
cost = tf.reduce_sum(tf.square(activation - y))/4
optimizer = tf.train.GradientDescentOptimizer(.1).minimize(cost)
init = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(init)
for i in range(5000):
train_data = sess.run(optimizer, feed_dict={x: train_X, y: train_Y})
result = sess.run(activation, feed_dict={x:train_X})
print(result)
Run Code Online (Sandbox Code Playgroud)
5000次迭代后:
[[ 0.0031316 ]
[ 0.12012422]
[ 0.12012422]
[ 0.85576665]] …Run Code Online (Sandbox Code Playgroud)