低调小萱

导航

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

posted on 2021-06-24 16:24  低调小萱  阅读(109)  评论(0)    收藏  举报