import numpy as npimport tensorflow as tfimport matplotlib.pyplot as plt#使用numpy生成200个随机点x_data = np.linspace(-0.5,0.5,200)[:,np.newaxis]noise = np.random.normal(0,0.02,x_data.shape)y_data = np.square(x_data) + noise#定义两个placeholderx = tf.placeholder(tf.float32,[None,1])y = tf.placeholder(tf.float32,[None,1])#定义神经网络中间层Weights_L1 = tf.Variable(tf.random_normal([1,10]))biases_L1 = tf.Variable(tf.zeros([1,10]))Wx_plus_b_L1 = tf.matmul(x,Weights_L1) + biases_L1L1 = tf.nn.tanh(Wx_plus_b_L1)#定义神经网络输出层Weights_L2 = tf.Variable(tf.random_normal([10,1]))biases_L2 = tf.Variable(tf.zeros([1,1]))Wx_plus_b_L2 = tf.matmul(L1,Weights_L2) + biases_L2prediction = tf.nn.tanh(Wx_plus_b_L2)#二次代价函数loss = tf.reduce_mean(tf.square(y - prediction))#使用梯度下降法train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)with tf.Session() as sess: #变量初始化 sess.run(tf.global_variables_initializer()) for _ in range(2000): sess.run(train_step,feed_dict={x:x_data,y:y_data}) #获得预测值 prediction_value = sess.run(prediction,feed_dict={x:x_data}) #画图 plt.figure() plt.scatter(x_data,y_data) plt.plot(x_data,prediction_value,'r-',lw = 5) plt.show()
得到结果:
——
import tensorflow as tffrom tensorflow.examples.tutorials.mnist import input_data#载入数据集mnist = input_data.read_data_sets("MNIST_data",one_hot=True)#每个批次的大小batch_size = 100#计算一共有多少个批次n_batch = mnist.train.num_examples // batch_size#定义两个placeholderx = tf.placeholder(tf.float32,[None,784]) #图片y = tf.placeholder(tf.float32,[None,10]) #标签#创建一个简单的神经网络w = tf.Variable(tf.zeros([784,10]))b = tf.Variable(tf.zeros([10]))prediction = tf.nn.softmax(tf.matmul(x,w)+b)#二次代价函数loss = tf.reduce_mean(tf.square(y-prediction))#梯度下降算法train_step = tf.train.GradientDescentOptimizer(0.2).minimize(loss)#初始化变量init = tf.global_variables_initializer()#结果存放在一个bool类型的列表中,argmax()返回一维张量中最大值所在的位置,equal函数判断两者是否相等correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(prediction,1))#求准确率,cast:将bool型转换为0,1然后求平均正好算到是准确率accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))with tf.Session() as sess: sess.run(init) for epoch in range(21): for batch in range(batch_size):#next_batch:不断获取下一组数据 batch_xs,batch_ys = mnist.train.next_batch(batch_size) sess.run(train_step,feed_dict={x:batch_xs,y:batch_ys}) acc = sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels}) print("Iter "+str(epoch)+",Testing Accuracy "+str(acc))
训练结果:
Iter 0,Testing Accuracy 0.657Iter 1,Testing Accuracy 0.7063Iter 2,Testing Accuracy 0.7458Iter 3,Testing Accuracy 0.7876Iter 4,Testing Accuracy 0.8203Iter 5,Testing Accuracy 0.8406Iter 6,Testing Accuracy 0.8492Iter 7,Testing Accuracy 0.8586Iter 8,Testing Accuracy 0.8642Iter 9,Testing Accuracy 0.8678Iter 10,Testing Accuracy 0.8709Iter 11,Testing Accuracy 0.8736Iter 12,Testing Accuracy 0.8751Iter 13,Testing Accuracy 0.8784Iter 14,Testing Accuracy 0.88Iter 15,Testing Accuracy 0.8816Iter 16,Testing Accuracy 0.883Iter 17,Testing Accuracy 0.8841Iter 18,Testing Accuracy 0.8847Iter 19,Testing Accuracy 0.8855Iter 20,Testing Accuracy 0.8878
可见,通过多次的训练,识别的准确值不断提高
——