[tensorflow]异或门的实现

一段小程序:待理解

import tensorflow as tf
import numpy as np
#输入训练数据,这里是python的list, 也可以定义为numpy的ndarray
x_data = [[1., 0.], [0., 1.], [0., 0.], [1., 1.]]
#定义占位符,占位符在运行图的时候必须feed数据
x = tf.placeholder(tf.float32, shape = [None, 2])
#训练数据的标签,注意维度
y_data = [[1], [1], [0], [0]]
y = tf.placeholder(tf.float32, shape = [None, 1])
#定义variables,在运行图的过程中会被按照优化目标改变和保存
weights = {'w1': tf.Variable(tf.random_normal([2, 16])), 'w2': tf.Variable(tf.random_normal([16, 1]))}
bias = {'b1': tf.Variable(tf.zeros([1])), 'b2': tf.Variable(tf.zeros([1]))}
#定义对于节点的操作函数
def nn(x, weights, bias):
    d1 = tf.matmul(x, weights['w1']) + bias['b1']
    d1 = tf.nn.relu(d1)
    d2 = tf.matmul(d1, weights['w2']) + bias['b2']
    d2 = tf.nn.sigmoid(d2)
    return d2
#预测值
pred = nn(x, weights, bias)
#损失函数
cost = tf.reduce_mean(tf.square(y - pred))
#学习率
learning_rate = 0.01
#定义tf.train用来训练
# train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)  ## max_step: 20000, loss: 0.002638
train_step = tf.train.AdamOptimizer(learning_rate).minimize(cost)  ## max_step: 2000, loss: 0.000014
#初始化参数,图运行的一开始必须初始化所有变量
init = tf.global_variables_initializer()
# correct_pred = tf.equal(tf.argmax(y, 1), tf.argmax(pred, 1))
# accuracy = tf.reduce_mean(tf.cast(correct_pred, 'float'))

#运行图,with语句调用其后面函数的__enter()__函数,将返回值赋给as后面的参数,并在块的最后调用__exit()__函数,相当于
#sess = tf.Sessions(),

with tf.Session() as sess:
    sess.run(init)
    max_step = 2000
    for i in range(max_step + 1):
        sess.run(train_step, feed_dict = {x: x_data, y: y_data})
        loss = sess.run(cost, feed_dict = {x: x_data, y: y_data})
        # acc = sess.run(accuracy, feed_dict = {x: x_data, y: y_data})
        # 输出训练误差和测试数据的标签
        if i % 100 == 0:
            print('step: '+ str(i) + '  loss:' + "{:.6f}".format(loss)) #+ '    accuracy:' + "{:.6f}".format(acc))
            print(sess.run(pred, feed_dict = {x: x_data}))
    print('end')

#sess.close()

  

posted @ 2018-06-08 02:05  Elpsywk  阅读(447)  评论(0编辑  收藏  举报