【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 優(yōu)化器來優(yōu)化求解過程
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()
還是很有成就感的帆竹,哈哈哈~