人工智能--Keras网络评估
Posted Abro.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了人工智能--Keras网络评估相关的知识,希望对你有一定的参考价值。
学习目标:
- 掌握利用Keras评估神经网络性能的方法
- 掌握利用Keras保存与加载神经网络模型的方法
学习内容:
对cifar10数据库(10类),做如下实验:
- 利用回调(callbacks),设置ModelCheckpoint,把训练过程中对验证集分类精度最高的模型保存为.h5格式的文件,并且另写一个.py文件,不用重新训练模型,直接读取.h5文件和测试数据计算识别率。
- 利用回调(callbacks),记录TensorBoard类的日志,并且在浏览器可视化训练过程。
- 保存整个模型和权重,并在另外一个.py文件中读取出来,然后对测试样本分类。
学习过程:
1.
准确率为0.3968
另一个.py文件读取模型:
准确率也为0.3968
2.查看记录TensorBoard类的日志:
时间序列:
准确率为0.3968
3.
读取模型:
能读取出刚刚保存的模型的权重;
源码:
总的源码:
# In[1]:读取cifar10数据集
from keras.datasets import cifar10
from keras import utils
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
y_train=utils.to_categorical(y_train,num_classes=10) #
y_test=utils.to_categorical(y_test,num_classes=10) #
x_train,x_test = x_train/255.0, x_test/255.0
# In[2]:构造网络
from keras import Sequential,layers,optimizers
model = Sequential()
model.add(layers.Reshape((32*32*3,),input_shape=(32,32,3)))
model.add(layers.Dense(512, activation='relu',name='dense1'))
model.add(layers.Dense(10, activation='softmax',name='dense2'))
optimizer = optimizers.SGD(lr=0.001)
model.compile(optimizer,loss='categorical_crossentropy', metrics=['accuracy']) #分类交叉熵函数
# In[4]:训练和测试
# TensorBoard 日志的路径要用 os.path.join 生成,不然在 windows 下会报错
import os
log_dir = os.path.join("logs")
if not os.path.exists(log_dir):
os.mkdir(log_dir)
from keras import callbacks
my_callbacks = [
# 每一代训练结束时保存验证集精度最高的模型的权重系数
callbacks.ModelCheckpoint(filepath='mymodel_epoch:02d.h5',
monitor='val_accuracy',
save_best_only=True),
callbacks.TensorBoard(log_dir=log_dir),
]
# 保存模型
model_save_path = "model_file_path.h5"
model.save(model_save_path)
# 删除当前已存在的模型
del model
# 加载模型,不需要模型的定义代码,即可从.h5文件恢复整个模型,包括结构和权重
from keras.models import load_model
model = load_model(model_save_path) #加载模型
# In[3]:
# 拟合模型
model.fit(x_train, y_train,
validation_data=(x_test, y_test),
batch_size=32,
epochs=6,
callbacks=my_callbacks)
# In[5]:
# 读取checkpoint保存的权重,以继续训练或者测试
model.load_weights('mymodel_05.h5')
loss, accuracy = model.evaluate(x_test, y_test)
# val_accuracy: 0.9777
# In[6]:
model.load_weights('model_file_path.h5')
loss, accuracy = model.evaluate(x_test, y_test)
# In[获取模型在某一层的输出]:
from keras.models import Model
# 取某一层的输出为输出新建为model,采用函数模型
#dense1_layer_model = Model(inputs=model.input,outputs=model.get_layer('dense2').output)
dense1_layer_model = Model(inputs=model.input,outputs=model.get_layer('dense2').output)
# 以这个model的预测值作为输出
#x_test
#dense1_output = dense1_layer_model.predict(x_train)
dense1_output = dense1_layer_model.predict(x_test)
print(dense1_output.shape)
print(dense1_output)
第一小问:
#第一问
from keras.datasets import cifar10
from keras import utils
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
y_train=utils.to_categorical(y_train,num_classes=10)
y_test=utils.to_categorical(y_test,num_classes=10)
x_train,x_test = x_train/255.0, x_test/255.0
#加载模型
from keras.models import load_model
model = load_model('mymodel_05.h5')
loss, accuracy = model.evaluate(x_test, y_test)
第三小问:
第三小问:
from keras.datasets import cifar10
from keras import utils
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
y_train=utils.to_categorical(y_train,num_classes=10)
y_test=utils.to_categorical(y_test,num_classes=10)
x_train,x_test = x_train/255.0, x_test/255.0
#加载模型
from keras.models import load_model
model = load_model('model_file_path.h5')
loss, accuracy = model.evaluate(x_test, y_test)
学习产出:
能读出了模型的类别、总共有多少个测试样本和模型的权重。
以上是关于人工智能--Keras网络评估的主要内容,如果未能解决你的问题,请参考以下文章
[Python人工智能] 三十.Keras深度学习构建CNN识别阿拉伯手写文字图像