Keras (二)



一.keras ,使用API 方式搭建网络模型


train 文件:

# 显示中文
#-*- 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 文件:

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()



二. 回调函数

回调函数是一个函数的合集,会在训练的阶段中所使用。你可以使用回调函数来查看训练模型的内在状态和统计。

三.添加注意力机制

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

猜你喜欢

转载自blog.csdn.net/zhaozhao236/article/details/109477996