【step0】
准备工作:构造数据集,y=x^2,并添加随机噪声
x=np.linspace(-1,1,100[:,np.newaxis]
noise=np.random.normal(0,0.1,size=x.shape
y=np.power(x,2)+noise
plt.scatter(x,y)
plt.show()
【step1】
定义输入:采用tf.placeholder
tf_x=tf.placeholder(tf.float32,x.shape)
tf_y=tf.placeholder(tf.float32,y.shape)
【step2】
定义学习参数:注意tf.layers.dense()函数参数组成,它默认初始化了全连接的权重w和偏置b,见kernel_initializer和bias_initializer
{
inputs,
units, #每层的神经元个数
activation=None,
use_bias=True,
kernel_initializer=None, ##卷积核的初始化器
bias_initializer=tf.zeros_initializer(), ##偏置项的初始化器,默认初始化为0
......
}
l1=tf.layers.dense(tf_x,10,tf.nn.relu)
output=tf.layers.dense(l1,1)
【step3】
定义学习方法:学习目标是loss最小化,并采用gradient decent 优化器来优化求解过程
loss=tf.losses.mean_squared_error(tf_y,output)
optimizer=tf.train.GradientDescentOptimizer(learning_rate=0.5)
train_op=optimizer.minimize(loss)
【step4】
初始化变量:tf.global_variables_initializer()会初始化先前定义的所有tf.Variable
sess = tf.Session()
otherssess.run(tf.global_variables_initializer())
graphplt.ion()
【step5】
训练模型:每迭代5次观察结果,并把网络的输出用线条来拟合
for step in range(100):
output _, l, pred = sess.run([train_op, loss, output], {tf_x: x, tf_y: y})
if step % 5 == 0:
plt.cla()
plt.scatter(x, y)
plt.plot(x, pred, 'r-', lw=5)
plt.text(0.5, 0, 'Loss=%.4f' % l, fontdict={'size': 20, 'color': 'red'})
plt.pause(0.1)
plt.ioff()
plt.show()
还是很有成就感的,哈哈哈~
网友评论