### create a NN # 添加层 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 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)[:,np.newaxis] # 300个 -1~1 行矩阵变成列矩阵 # add noises noise=np.random.normal(0,0.05,x_data.shape) y=np.square(x_data)-0.5+noise xs=tf.placeholder(tf.float32,[None,1]) #None 无论多少例子都可以 ys=tf.placeholder(tf.float32,[None,1]) # create NN l1=add_layer(xs,1,10,activation_function=tf.nn.relu) prediction=add_layer(l1,10,1,activation_function=None) loss=tf.reduce_mean(tf.reduce_sum(tf.square(ys-prediction), reduction_indices=[1])) #维度为1 train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss) init=tf.initialize_all_variables() sess=tf.Session() sess.run(init) for i in range(1000): sess.run(train_step,feed_dict={xs: x_data, ys: y}) if i % 100==0: print("i is:",i,"error is:",sess.run(loss,feed_dict={xs:x_data,ys:y}))
【结果】:
i is: 0 error is: 0.42239714 i is: 100 error is: 0.006036017 i is: 200 error is: 0.0050696223 i is: 300 error is: 0.004576256 i is: 400 error is: 0.0042678043 i is: 500 error is: 0.004062524 i is: 600 error is: 0.0039021121 i is: 700 error is: 0.0037654035 i is: 800 error is: 0.00363621 i is: 900 error is: 0.0034959468
【结果可视化】:
if i==999: fig=plt.figure() ax=fig.add_subplot(111) ax.scatter(x_data,y) prediction_value=sess.run(prediction,feed_dict={xs:x_data,ys:y}) lines=ax.plot(x_data,prediction_value,'r-',lw=5) #|线宽为5 plt.show()