深度学习框架Keras

发布时间 2023-06-15 11:53:30作者: 找回那所有、

模型亮点

  1. 测试集上评分为1.0
  2. 数据集由sklearn自带

-----------------------------------------以下为模型具体实现-----------------------------------------

Step1.数据读取

how 数据读取?

  • 使用load_iris命令,加载鸢尾花数据集
from sklearn.datasets import load_iris
iris=load_iris()
x=iris.data
y=iris.target
import pandas as pd
df_x=pd.DataFrame(x)
df_y=pd.DataFrame(y)
df_x.columns=['sepal_length','sepal_width','petal_length','petal_width']
df_y.columns=['class']

Step2.划分训练集和测试集

why 划分训练集和测试集?

  • 把所有样本当作训练集,做过的题都是旧题,都会~
  • 把部分样本当作训练集,在新题上做测试,起到检测效果~
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=0)

Step3.数据清洗

why 数据清洗?how 数据清洗?

  • Squential模型为单输出,但那这里是多分类问题
  • 把分类标签y,变成独热编码

Step4.定义神经网络结构

what 定义结构?

  1. 定义模型models,序贯模型Sequential或函数式模型Functional,前者是线性单输出,后者是多输出
  2. 定义常用层layers,全连接层Dense(与下一层全连接),激活层Activation(对上一层输出施加激活函数),中断层Dropout(防止过拟合)
from keras.models import Sequential
from keras.layers import Dense,Activation
model=Sequential() #定义模型
model.add(Dense(units=16,input_dim=4)) #定义输入层为4个神经元,第一个隐藏层为16个神经元
model.add(Activation('relu')) #定义激活层
model.add(Dense(16)) #定义第二个隐藏层为16个神经元
model.add(Activation('relu'))
model.add(Dense(3)) #定义输出层为3个神经元
model.add(Activation('softmax'))

Step5.启动模型

how 启动模型?

  1. 编译模型,设定初始化参数
  2. 拟合训练集数据,也需设定参数

what 设定参数?

  • epochs:迭代次数,含完整的一次前向与后向传播,batch_size:数据集太大,分块训练
  • verbose:是否输出每次迭代的详细信息,validation_data:其中的数据集不会被用来拟合
model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])
model.fit(x_train,y_train_ohe,epochs=20,batch_size=1,verbose=2,validation_data=(x_test,y_test_ohe))

Step6.模型评估

how 模型评估?

  • 这里没有自带的score,改用evaluate
print("训练集上评分:{}".format(round(model.evaluate(x_train,y_train_ohe,verbose=2)[1],2))) #以列表形式,返回loss和指定好的accuracy,这里只需返回accuracy
print("测试集上评分:{}".format(round(model.evaluate(x_test,y_test_ohe,verbose=2)[1],2)))

Step7.保存模型

why 保存模型?how 保存模型?

  1. for job-lib(工作自由)~
  2. dump转存模型,以pkl格式
  3. load加载模型
from sklearn.externals import joblib
joblib.dump(model,'d:\keras.pkl')
new_model=joblib.load('d:\keras.pkl')
print(new_model.predict(x_test,verbose=2)) #返回分类值对应概率
print(new_model.predict_classes(x_test,verbose=2)) #返回分类值

-END