Проблемы с реализацией гейта XOR с нейронными сетями в Tensorflow
Я хочу сделать тривиальную нейронную сеть, она должна просто реализовать XOR gate. Я использую библиотеку TensorFlow в Python. Для ворот XOR, единственными данными, с которыми я тренируюсь, является полная таблица истинности, этого должно быть достаточно, верно? Чрезмерная оптимизация - это то, что я ожидаю, что произойдет очень быстро. Проблема с кодом в том, чтовеса а такжеуклоны не обновлять. Каким-то образом это все еще дает мне 100% точность с нулем для смещений и весов.
x = tf.placeholder("float", [None, 2])
W = tf.Variable(tf.zeros([2,2]))
b = tf.Variable(tf.zeros([2]))
y = tf.nn.softmax(tf.matmul(x,W) + b)
y_ = tf.placeholder("float", [None,1])
print "Done init"
cross_entropy = -tf.reduce_sum(y_*tf.log(y))
train_step = tf.train.GradientDescentOptimizer(0.75).minimize(cross_entropy)
print "Done loading vars"
init = tf.initialize_all_variables()
print "Done: Initializing variables"
sess = tf.Session()
sess.run(init)
print "Done: Session started"
xTrain = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
yTrain = np.array([[1], [0], [0], [0]])
acc=0.0
while acc<0.85:
for i in range(500):
sess.run(train_step, feed_dict={x: xTrain, y_: yTrain})
print b.eval(sess)
print W.eval(sess)
print "Done training"
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
print "Result:"
acc= sess.run(accuracy, feed_dict={x: xTrain, y_: yTrain})
print acc
B0 = b.eval(sess)[0]
B1 = b.eval(sess)[1]
W00 = W.eval(sess)[0][0]
W01 = W.eval(sess)[0][1]
W10 = W.eval(sess)[1][0]
W11 = W.eval(sess)[1][1]
for A,B in product([0,1],[0,1]):
top = W00*A + W01*A + B0
bottom = W10*B + W11*B + B1
print "A:",A," B:",B
# print "Top",top," Bottom: ", bottom
print "Sum:",top+bottom
Я следую учебнику отhttp://tensorflow.org/tutorials/mnist/beginners/index.md#softmax_regressions и в последнем цикле for я печатаю результаты из матрицы (как описано в ссылке).
Кто-нибудь может указать на мою ошибку и что я должен сделать, чтобы исправить это?