導(dǎo)入庫
我們先從導(dǎo)入相關(guān)庫開始涨享。這里我們導(dǎo)入TensorFlow缸废,并將其簡稱為tf來方便使用吟秩。
然后咱扣,我們導(dǎo)入一個(gè)名為numpy的庫,該庫可以幫助我們輕松地將數(shù)據(jù)表示為列表涵防。
將神經(jīng)網(wǎng)絡(luò)定義為一組順序?qū)拥目蚣芊Q為keras闹伪,我們也將其導(dǎo)入。
import tensorflow as tf
import numpy as np
from tensorflow import keras
定義并編譯神經(jīng)網(wǎng)絡(luò)
下面壮池,我們將創(chuàng)建最簡單的神經(jīng)網(wǎng)絡(luò)偏瓤。它具有1層,并且該層只有1個(gè)神經(jīng)元椰憋,其輸入值也只有一個(gè)厅克。
model = tf.keras.Sequential([keras.layers.Dense(input_shape=[1], units=1)])
現(xiàn)在,我們開始編譯神經(jīng)網(wǎng)絡(luò)橙依。在做之前证舟,我們必須指定兩個(gè)函數(shù),一個(gè)是損失函數(shù)窗骑,一個(gè)是優(yōu)化器女责。
假設(shè)我們的函數(shù)中,數(shù)字之間的關(guān)系為创译。當(dāng)計(jì)算機(jī)嘗試“學(xué)習(xí)”時(shí)抵知,會做出猜測,也許認(rèn)為數(shù)字之間滿足
。損失函數(shù)根據(jù)已知的正確答案來衡量猜測的答案刷喜,并衡量其執(zhí)行的好壞程度残制。
然后,它使用optimizer函數(shù)進(jìn)行另一個(gè)猜測吱肌。基于損失函數(shù)的運(yùn)行方式仰禽,它將嘗試使損失最小化氮墨。到那時(shí),也許會得到類似的結(jié)果吐葵,雖然此時(shí)的結(jié)果仍然很糟糕规揪,但是更接近正確的結(jié)果。
它將重復(fù)此操作温峭,最終重復(fù)的數(shù)量由epochs給出猛铅。但是首先,我們要告它所要使用的方法凤藏,即對損失使用均方誤差奸忽,對optimizer使用隨機(jī)梯度下降方法。
model.compile(optimizer='sgd', loss='mean_squared_error')
提供數(shù)據(jù)
接下來揖庄,我們將輸入一些數(shù)據(jù)栗菜,取6組輸入與輸出。
x = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float)
y = np.array([-3.0, -1.0, 1.0, 3.0, 5.0, 7.0], dtype=float)
訓(xùn)練神經(jīng)網(wǎng)絡(luò)
訓(xùn)練神經(jīng)網(wǎng)絡(luò)的過程蹄梢,是調(diào)用model.fit來學(xué)習(xí)x與y之間的關(guān)系疙筹。
model.fit(x, y, epochs=100)
經(jīng)過上述步驟之后,我們得到了一個(gè)訓(xùn)練后的神經(jīng)網(wǎng)絡(luò)禁炒,它已經(jīng)學(xué)習(xí)到了x與y之間隱藏的數(shù)學(xué)關(guān)系而咆。我們使用model.predict方法來找出未知的x所對應(yīng)的y。例如幕袱,如果x=10暴备,y將會是什么?根據(jù)我們知道y應(yīng)該是19们豌,那么神經(jīng)網(wǎng)絡(luò)給我們的輸出是多少馍驯?
print(model.predict([10.0]))
我們可以看到,預(yù)測的結(jié)果與我們期望的19非常接近玛痊。
code
import tensorflow as tf
import numpy as np
from tensorflow import keras
model = tf.keras.Sequential([keras.layers.Dense(input_shape=[1], units=1)])
model.compile(optimizer='sge', loss='mean_squared_error')
x = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float)
y = np.array([-3.0, -1.0, 1.0, 3.0, 5.0, 7.0], dtype=float)
model.fit(x, y, epochs=100)
print(model.predict([10.0]))