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()
基于tensorflow2 keras的API函数式调用 完成线性回归
原文:https://www.cnblogs.com/didiao-xiaoxuan/p/14927435.html