Keras



1. Keras, use API to build a network model


train file:

# 显示中文
#-*- coding: utf-8 -*-


from keras.datasets import mnist  #直接从keras里面应用数据集
from keras.utils import np_utils  #keras 里面用到的一个 np 的工具包
from keras.models import Sequential

# 二维的卷积,二维的池化 Flatten是指把数据扁平化。
from keras.layers import Dense,Dropout,Convolution2D,MaxPool2D,Flatten #导入Dropt
from keras.optimizers import SGD,Adam #优化函数;




# 载入数据
(x_train,y_train),(x_test,y_test)=mnist.load_data() #分为测试集和训练集
print(x_train.shape)
print(y_train[5])


# (60000,28,28) -> (60000,28,28,1) #最后一个参数是深度,黑白的深度为1,彩色的是3
# 将数据转换为四维的格式.

x_train=x_train.reshape(-1,28,28,1)/255.0 #-1表示是自动判断,/225是表示归一化。
x_test=x_test.reshape(-1,28,28,1)/255.0#行数是 x_train.shape[0]行。
 
# 标签转换成 one hot 格式
y_train=np_utils.to_categorical(y_train,num_classes=10)#专门用来转格式的包
y_test=np_utils.to_categorical(y_test,num_classes=10)


# 定义模型的顺序
model=Sequential()

# 第一个卷积层
model.add(Convolution2D(input_shape=(28,28,1),filters=32,kernel_size=5,strides=1,padding="same",activation="relu"))
model.add(MaxPool2D(pool_size=2,strides=2,padding='same',))
model.add(Convolution2D(64,5,strides=1,padding='same',activation='relu'))
model.add(MaxPool2D(2,2,"same"))
model.add(Flatten())
model.add(Dense(1024,activation="relu"))
model.add(Dropout(0.5))
model.add(Dense(10,activation="softmax"))
adam=Adam(lr=1e-4)
model.compile(optimizer=adam,loss='categorical_crossentropy',metrics=["accuracy"])

# 训练模型
# 训练历史的可视化
history = model.fit(x_train,y_train,verbose=1, validation_split=0.25,batch_size=64,epochs=10)

# 评估模型
loss,accuracy=model.evaluate(x_test,y_test)

## 保存模型
model.save('./data/model1.h5')

## 保存histroy
import pickle #这是一个用来保存任何数据的库
with open('./data/model_history.pickle','wb') as file_pi:
    pickle.dump(history.history,file_pi)
with open('./data/model_history.txt','wb') as file_pi:
    pickle.dump(history.history,file_pi)

test file:

from keras.models import load_model

# 加载已经存在的模型
model=load_model('./data/model1.h5')

# 把模型打印出来
model.summary()

# 把模型保存为人可以看懂的json文件,但是只有结构,没有参数。
json_string=model.to_json()



## 模型的可视化
## 绘制一张模型图,并保存为文件
from keras.utils import plot_model


# plot_model(model,to_file='./data/model.png')


## 把 history 文件加载进来,然后再画出损失函数和精确度来
import pickle
with open('./data/model_history.pickle','rb') as f:
    history=pickle.load(f)

history=history
## 绘制训练集,验证集的准确率
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号


plt.plot(history['acc'])
plt.plot(history['val_acc'])
plt.title('训练集合测试集的准确率')
plt.ylabel('Accuracy')
plt.xlabel('Epoch')
plt.legend(['Train', 'Test'], loc='upper left')
plt.show()


# 绘制训练 & 验证的损失值
plt.plot(history['loss'])
plt.plot(history['val_loss'])
plt.title('模型的损失函数')
plt.ylabel('Loss')
plt.xlabel('Epoch')
plt.legend(['Train', 'Test'], loc='upper left')
plt.show()



2. Callback function

The callback function is a collection of functions that will be used in the training phase. You can use the callback function to view the internal status and statistics of the trained model.

Three. Add attention mechanism

https://zhuanlan.zhihu.com/p/99260231

Guess you like

Origin blog.csdn.net/zhaozhao236/article/details/109477996