1. 程式人生 > 其它 >基於tensorflow2 keras的API函式式呼叫 完成線性迴歸

基於tensorflow2 keras的API函式式呼叫 完成線性迴歸

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()