#import os #os.environ[‘TF_CPP_MIN_LOG_LEVEL‘] = ‘2‘ import tensorflow as tf import numpy as np import matplotlib.pyplot as plt #添加一个神经层,定义添加神经层的函数 def add_layer(inputs, in_size, out_size, activation_function = None): Weights = tf.Variable(tf.random_normal([in_size,out_size])) biases = tf.Variable(tf.zeros([1,out_size]) + 0.1) Wx_plus_b = tf.matmul(inputs,Weights) + biases #Wx_plus_b代表W*x+b #如果没有激励函数,即为线性关系,那么直接输出,不需要激励函数(非线性函数) if activation_function is None: outputs = Wx_plus_b else: outputs = activation_function(Wx_plus_b) #把这个值传进去 return outputs x_data = np.linspace(-1, 1, 300, dtype = np.float32)[:, np.newaxis] noise = np.random.normal(0, 0.05, x_data.shape).astype(np.float32) y_data = np.square(x_data) - 0.5 + noise
xs = tf.placeholder(tf.float32, [None, 1]) ys = tf.placeholder(tf.float32, [None, 1]) l1 = add_layer(xs, 1, 10, activation_function = tf.nn.relu) #预测值;定义输出层,输入为l1=前一层隐藏层的输出,输入的层数为10=隐藏层神经元的个数,输出的层数为1=输出一般只有1层 prediction = add_layer(l1, 10, 1, activation_function = None) loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys-prediction),reduction_indices = [1])) train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss) #机器要学习的内容,使用优化器提升准确率,学习率为0.1<1,表示以0.1的效率来最小化误差loss init = tf.global_variables_initializer()
sess = tf.Session() #定义Session,并使用Session来初始化步骤 sess.run(init) #绘制真实数据 fig = plt.figure() #生成一个画框/画布 ax = fig.add_subplot(1, 1, 1) #将画框分为1行1列,并将图 画在画框的第1个位置 ax.scatter(x_data, y_data) #画散点图 plt.ion() #交互绘制功能,用于连续显示;本次运行时请注释掉这条语句,全局运行不需要注释掉 plt.show() #显示所绘制的图形,但是他只显示当前运行时的图像,不会一直显示多次;在实际运行当中,注释掉上面两条代码,程序才会正常运行,暂时不知道为什么。。。 for i in range(1000): #训练1000次 sess.run(train_step, feed_dict={xs:x_data, ys:y_data}) #给placeholder喂数据,把x_data赋值给xs if i % 50 == 0: #每50步输出一次机器学习的误差 #print(sess.run(loss, feed_dict={xs:x_data, ys:y_data})) #可视化结果与改进 try: ax.lines.remove(lines[0]) #抹去前一条绘制的曲线,在这里我们要先抹去再绘制,防止第一次运行时报错,我们使用try语句 except Exception: pass prediction_value = sess.run(prediction, feed_dict={xs:x_data}) #绘制预测数据 lines = ax.plot(x_data, prediction_value,‘r-‘,lw=5) #x轴数据,y轴数据,红色的线,线的宽度为5 plt.pause(0.1) #绘制曲线的时间间隔为0.1秒
原文:https://www.cnblogs.com/Lee-yl/p/10022942.html