Keras



1. Keras, usa API para crear un modelo de red


archivo de tren:

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

archivo de prueba:

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. Función de devolución de llamada

La función de devolución de llamada es una colección de funciones que se utilizarán en la fase de entrenamiento. Puede utilizar la función de devolución de llamada para ver el estado interno y las estadísticas del modelo entrenado.

Tres. Agregar mecanismo de atención

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

Supongo que te gusta

Origin blog.csdn.net/zhaozhao236/article/details/109477996
Recomendado
Clasificación