模型亮点
- 测试集上评分为1.0
- 数据集由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 定义结构?
- 定义模型models,序贯模型Sequential或函数式模型Functional,前者是线性单输出,后者是多输出
- 定义常用层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个神经元;unit输出维度,input_dim输入维度 model.add(Activation('relu')) #定义激活层 model.add(Dense(16)) #定义第二个隐藏层为16个神经元 model.add(Activation('relu')) model.add(Dense(3)) #定义输出层为3个神经元 model.add(Activation('softmax'))
Step5.启动模型
how 启动模型?
- 编译模型,设定初始化参数
- 拟合训练集数据,也需设定参数
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 保存模型?
- for job-lib(工作自由)~
- dump转存模型,以pkl格式
- 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
标签:框架,Keras,模型,add,train,深度,test,import,model From: https://www.cnblogs.com/peitongshi/p/17482455.html