全部基于Tensorflow=1.14.0
Tensorflow 实例
一个简单的神经网络实例,用于入门。
一个输入层1个,隐藏层10个,输出层1个的神经元。这个神经元数量还是需要思考一下的。为什么是1个?
import tensorflow as tf
import numpy as np
# 一个创建层的函数,可以用来创建隐层,也可以是输出层
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]))
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]
noise = np.random.normal(0,0.05,x_data.shape)
y_data = np.square(x_data)-0.5+noise
xs = tf.placeholder(tf.float32,[None,1])
ys = tf.placeholder(tf.float32,[None,1])
# 隐层10个神经元
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(y_data - prediction),reduction_indices=[1]))
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
plot_y_li = [] # 用于画图
with tf.Session() as sess:
init = tf.global_variables_initializer()
sess.run(init)
for i in range(1000):
sess.run(train_step,feed_dict={xs:x_data,ys:y_data})
if i%50==0:
prediction_y = sess.run(prediction,feed_dict={xs:x_data,ys:y_data}) # 用于画图
plot_y_li.append(prediction_y) # 用于画图
print(sess.run(loss,feed_dict={xs:x_data,ys:y_data}))
0.102945946
0.007416652
0.0055744103
0.004574176
0.0040580644
0.0037603306
0.0035633855
0.0034116744
0.0032895773
0.003196809
0.003112991
0.0030539748
0.0030080697
0.0029651488
0.002928619
0.0029001895
0.0028783926
0.0028591845
0.0028434037
0.0028303121
# 画图展示
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.animation as animation
# 指定渲染环境
%matplotlib notebook
# %matplotlib inline
# 先画原始的静态部分,也就是x_data 与 y_data的散点图
fig = plt.figure()
plt.scatter(x_data,y_data)
plt.grid(ls='--')
plt.show()

# 加入动态点
def update_plot(num):
"""
更新图像,num为当前动图第几帧
"""
point_ani.set_data(x_data,plot_y_li[num])
return point_ani,
# 静态图
fig = plt.figure()
plt.scatter(x_data,y_data)
plt.grid(ls='--')
point_ani, = plt.plot(x_data[0],y_data[0],'ro')
print(point_ani)
ani = animation.FuncAnimation(fig,update_plot,frames=np.arange(0,100),interval=100,blit=True)
# 首先定义一个Updata_plot函数,用于绘制途中的数据点。此函数的输入参数num代表当前动画的第几帧,函数的返回,即为我们需要更新的对象,
# 需要特别注意的是:return point_ani,这个都好一定加上,否则动画不能正常显示。
# 当然这里操作的点对象point_ani 我们一般会提前声明得到:point_ani, = plt.plot(x[0],y[0],'ro').
# 接下来我们就是将此函数传入我们的FuncAnimation函数中,函数的参数说明可以参见官网,这里简要说明几个参数:
# fig:即为我们的绘制图像
# updata_plot 更新动画的函数
# np.arange(0,100):动画帧数,这需要是一个迭代的对象
# interval参数:动画的时间间隔
# blit参数:是否开启某种动画的渲染。
plt.show()
# ani.save('tf3_regression.gif', fps=2, writer='pillow')

网友评论