**
keras
基础与keras
断点连续
**
什么是断点连续
,刚开始学习keras
是非常迷茫的,对于一些大神的代码非常的好奇,为什么他们的代码可以接着上次的训练继续训练。
我也因此在网上不停的找资源,原来这种训练方法叫断点连续
,断点连续顾名思义,停下来接着上此继续训练。
而我们的模型一般分为两种,一种叫初始模型
,一种叫成熟模型
(个人口语,请勿当标准)。而一般的训练都是基于初始模型训练的,断点连续就是基于成熟模型训练的。
**
一 什么是初始模型
**
#初始模型构建
def model_nn():
model=keras.Sequential()
model.add(layers.Flatten())
model.add(layers.Dense(64,activation='relu'))
model.add(layers.Dense(64,activation='relu'))
model.add(layers.Dense(64,activation='relu'))
model.add(layers.Dense(10,activation='softmax'))
return model
这就是一种初始模型,只有四个层,一个输入层
,一个输出层
,两个隐藏层
(理论上隐藏层越多
,训练效果越好,你可以自己删掉几层试一试)。初始模型
就是这种基本搭建的模型。
#载入初始模型
model = model_nn()
二 什么是成熟模型
成熟模型就是基础模型在训练之后的模型,所以我们在模型训练的时候才发现,像loss,acc
越来越理想。
所以成熟模型
就是基于数据的陶寻熏而变的更加有韵味的基础模型
。
#模型编译,包括优化器选择和损失函数选择
model.compile(optimizer='adam',\
loss='sparse_categorical_crossentropy',metrics=['acc'])
#模型编译50次,并同时输出预测loss和acc
model.fit(train_data,train_label,epochs=50,\
batch_size=500,validation_data=(test_data, test_label))
提示,理论上batch_size
是越大越好,最好是一次就全部输出进去,但是计算机是不可能完全供应这种配置的,总而言之batch_size
越大,梯度下降越理想。
三 模型载入,数据预测
接下来就是与我们断点连续
息息相关的关键了,它就是模型载入
。
在刚才的训练后我们先保存模型
#模型保存名字为m1,地方在自己py文件同级目录下
model_label = './m1.h5'
model.save(model_label)
模型保存好当然就载入模型
开始预测了呀
#载入本地模型
model = load_model(model_label)
开始预测test
#输出我们预测的值,predict为模型预测的方法,\
# 因为我们的模型是输出10个值,所以要用numpy的argmax方法,取10个值里的最大的值
x_test = np.argmax(model.predict(test_data[:10]),axis=1)
print(x_test,'\n',test_label[:10])
四 断点连续
这就是我们的关键了,断点连续
,这个就相当于我们载入已经训练好的成熟的模型
,在成熟的模型
下继续训练
的概念
#载入成熟的模型
model = load_model(model_label)
#模型编译,包括优化器选择和损失函数选择
model.compile(optimizer='adam',\
loss='sparse_categorical_crossentropy',metrics=['acc'])
#在成熟模型基础上,继续编译50次,并同时输出预测loss和acc
model.fit(train_data,train_label,epochs=50,\
batch_size=500,validation_data=(test_data, test_label))
#保存模型
model.save(model_label)
这样我们就做完了断点连续
,是不是非常的简单,其实只要理解这个概念就不难了,就像在最后的数据预测
,需要载入本地保存的模型
,断点连续
同样是载入本地保存的模型
,在已有的基础上训练。
附加整体源代码
本代码是基于mnist数据集
进行训练的
import keras
import tensorflow as tf
import numpy as np
import keras.datasets.mnist as mnist
from keras import layers
from keras.models import load_model
import os
#初始模型构建
def model_nn():
model=keras.Sequential()
model.add(layers.Flatten())
model.add(layers.Dense(64,activation='relu'))
model.add(layers.Dense(64,activation='relu'))
model.add(layers.Dense(64,activation='relu'))
model.add(layers.Dense(10,activation='softmax'))
return model
#载入数据
(train_data , train_label),(test_data , test_label) = mnist.load_data()
#载入初始模型
model = model_nn()
#模型编译,包括优化器选择和损失函数选择
model.compile(optimizer='adam',\
loss='sparse_categorical_crossentropy',metrics=['acc'])
#模型编译50次,并同时输出预测loss和acc
model.fit(train_data,train_label,epochs=5,\
batch_size=500,validation_data=(test_data, test_label))
#模型保存名字为m1,地方在自己py文件同级目录下
model_label = './m2.h5'
model.save(model_label)
#载入本地模型
model = load_model(model_label)
#输出我们预测的值,predict为模型预测的方法,\
# 因为我们的模型是输出10个值,所以要用numpy的argmax方法,取10个值里的最大的值
x_test = np.argmax(model.predict(test_data[:10]),axis=1)
print('预测的十个值:',x_test,'\n','实际的十个值:',test_label[:10])
关于mnist数据集
载入失败的问题解决办法
办法一
mnist数据集
下载难免会出问题,链接:https://pan.baidu.com/s/17KUWe8JdQBHsAg3B4m5SNg
提取码:wyxn (csnd上找的连接)原博客地址
将下载好的文件是mnist.npz
然后复制到这种路径下,根据你python安装位置而定
负责成这样打开mnist.py
文件,注释掉这一段就行
这样就可以跳过下载,直接加载mnist数据集
了
方法二
把下载好的mnist.npz
文件复制到你的程序文件下,直接定义定义以下方法。我的程序是2.py
,于是我就将mnist.npz
放在我的同及目录下
def load_data(path='mnist.npz'):
path='mnist.npz'
f = np.load(path)
x_train, y_train = f['x_train'], f['y_train']
x_test, y_test = f['x_test'], f['y_test']
f.close()
return (x_train, y_train), (x_test, y_test)
然后直接读取数据
(train_data , train_label),(test_data , test_label) = load_data()
方法二代码总结
import keras
import tensorflow as tf
import numpy as np
from keras import layers
from keras.models import load_model
import os
#读取mnist数据集
def load_data(path='mnist.npz'):
path='mnist.npz'
f = np.load(path)
x_train, y_train = f['x_train'], f['y_train']
x_test, y_test = f['x_test'], f['y_test']
f.close()
return (x_train, y_train), (x_test, y_test)
#初始模型构建
def model_nn():
model=keras.Sequential()
model.add(layers.Flatten())
model.add(layers.Dense(64,activation='relu'))
model.add(layers.Dense(64,activation='relu'))
model.add(layers.Dense(64,activation='relu'))
model.add(layers.Dense(10,activation='softmax'))
return model
#载入数据
(train_data , train_label),(test_data , test_label) = load_data()
#载入初始模型
model = model_nn()
#模型编译,包括优化器选择和损失函数选择
model.compile(optimizer='adam',\
loss='sparse_categorical_crossentropy',metrics=['acc'])
#模型编译50次,并同时输出预测loss和acc
model.fit(train_data,train_label,epochs=5,\
batch_size=500,validation_data=(test_data, test_label))
#模型保存名字为m1,地方在自己py文件同级目录下
model_label = './m2.h5'
model.save(model_label)
#载入本地模型
model = load_model(model_label)
#输出我们预测的值,predict为模型预测的方法,\
# 因为我们的模型是输出10个值,所以要用numpy的argmax方法,取10个值里的最大的值
x_test = np.argmax(model.predict(test_data[:10]),axis=1)
print('预测的十个值:',x_test,'\n','实际的十个值:',test_label[:10])