基於tensorflow2 keras的API函式式呼叫 完成線性迴歸
阿新 • • 發佈:2021-06-24
import tensorflow as tf import numpy as np import matplotlib.pyplot as plt # 定義資料數量 xdata = [] ydata = [] # 生成資料 xdata = np.linspace(1., 3., 10) # 線性等分生成10個數據 # 擬合 y = a*x + b 的線性迴歸函式 # 定義 a=0.3,b=0.7,加上隨機噪聲 ydata = [0.3 * v + 0.7 + np.random.normal(0.0, 0.05) for v in xdata] plt.scatter(xdata, ydata) plt.show()# 將陣列轉換為tensorflow可識別的 張量 格式 x = tf.convert_to_tensor(xdata) y = tf.convert_to_tensor(ydata) # 使用順序模型,自己搭建模型 model = tf.keras.Sequential() # 新增Dense層,建立迴歸模型,搭建一個[1, 3, 1]的BP神經網路 model.add(tf.keras.layers.Dense(3, activation='relu', input_shape=(1,))) model.add(tf.keras.layers.Dense(1, )) # 檢視模型結構 model.summary()# 編譯模型 model.compile( optimizer='SGD', loss='mse') # 如果要看每一次訓練的具體情況,修改 verbose=1 history = model.fit(x, y, epochs=1000, verbose=0, validation_split=0.2 ) # 用資料進行預測 xtest = tf.linspace(2., 3., 3) y_pre = model.predict(xtest)print('輸入的x資料為:', xtest.numpy()) print('預測的結果為:', y_pre) # 畫擬合出來的曲線 fit_x_line = tf.linspace(1., 3., 100) fit_y_line = model.predict(fit_x_line) plt.plot(fit_x_line, fit_y_line, color='red') plt.scatter(xdata, ydata) plt.show() # 畫訓練集和測試集的loss曲線 train_loss = np.array(history.history['loss']) val_loss = np.array(history.history['val_loss']) epoch = np.array(history.epoch) train_line, = plt.plot(epoch, train_loss) val_line, = plt.plot(epoch, val_loss) plt.legend(handles=[train_line, val_line], labels=['train_loss', 'val_loss']) plt.xlabel('epoch') plt.ylabel('loss') plt.show()