Keras_简单线性回归
代码解析
导入包
import numpy as np
import pandas as pd
import tensorflow as tf
import matplotlib.pyplot as plt
from tensorflow.keras.layers import Dense
from tensorflow.keras.models import Sequential
from sklearn.model_selection import train_test_split
随机创建数据
x = np.array([50,30,15,40,55,20,45,10,60,25])
y = np.array([5.9,4.6,2.7,4.8,6.5,3.6,5.1,2.0,6.3,3.8])
数据划分
使用train_test_split
划分数据
test_size
:划分出来的测试集占总数据集的比例
shuffle
:是否在划分前将数据顺序打乱
random_state
:shuffle的随机种子
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3,shuffle=True,random_state=23)
搭建网络
模型选用Sequential
用tf.keras.layers.Dense
进行全连接操作
input_dim
向量的维度,如果是第一个全连接层,需要设置输入层的大小
units
全连接层神经元个数
activation
激活函数,如果不设置,就表示不使用激活函数
name
model = Sequential()
model.add(Dense(input_dim=1,units=1,name='dense'))
设置模型
用tf.keras.Sequential.compile
进行模型设置
loss
损失函数
optimizer
优化器
model.compile(loss='mse',optimizer=tf.keras.optimizers.SGD(learning_rate=1e-5))
训练模型
用tf.keras.Sequential.fit
进行模型设置
batch_size
单次更新大小
epochs
训练次数
validation_split
验证集占训练集的比例
可以返回一个History对象,记录每一轮训练集和验证集的损失函数值和评价指标
history = model.fit(x=x_train,y=y_train,batch_size=2,epochs=100,validation_split=0.2)
验证模型
用tf.keras.Sequential.evaluate
进行模型设置
loss = model.evaluate(x=x_test,y=y_test)
预测模型
用tf.keras.Sequential.predict
进行模型设置
y_test_pred = model.predict(x=x_test)
整体代码
import numpy as np
import pandans as pd
import matplotlib as plt
from tensorflow.keras.layers import Dense
from tensorflow.keras.models import Sequential
from sklearn.model_selection import train_test_split
x = np.array[50,30,15,40,55,20,45,10,60,25]
y = np.array[5.9,4.6,2.7,4.8,6.5,3.6,5.1,2.0,6.3,3.8]
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3,shuffle=True,random_state=23)
model = Sequential()
model.add(Dense(input_dim=1,units=1,name='dense'))
model.compile(loss='mse',optimizer=tf.keras.optimizers.SGD(learning_rate=1e-5))
history = model.fit(x=x_train,y=y_train,batch_size=2,epochs=100,validation_split=0.2)
loss = model.evaluate(x=x_test,y=y_test)
y_test_pred = model.predict(x=x_test)
可视化管理
画散点图
#画散点图
plt.scatter(x,y)
#显示网格
plt.grid('')
#给横坐标命名
plt.xlabel('area')
#给纵坐标命名
plt.ylabel('price')
#输出图片
plt.show()
查看模型输出
#在设置模型结束后,查看模型输出
model.summary()
查看loss的变化趋势
#在训练模型结束后,查看loss的变化趋势
pd.DataFrame(history.history).plot()
plt.xlabel('epoch')
plt.show()
查看损失值
#在验证模型结束后,查看损失值
print(loss)
查看预测值
#在预测模型结束后,查看预测值
print(y_test_pred)
将训练集、测试集、预测函数画在一起
plt.scatter(x_test,y_test,color='g',label='test')
plt.scatter(x_train,y_train,color='b',label='train')
plt.plot(x_test,y_test_pred,color='r',label='predict')
plt.legend()
plt.show()
查看任意预测值
#在预测模型结束后,查看预测值
model.predict(np.array([35]))
查看模型参数
#在预测模型结束后,查看预测值
model.layers[0].get_weights()