人工智能--Keras网络评估

Posted Abro.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了人工智能--Keras网络评估相关的知识,希望对你有一定的参考价值。

学习目标:

  1. 掌握利用Keras评估神经网络性能的方法
  2. 掌握利用Keras保存与加载神经网络模型的方法

学习内容:

对cifar10数据库(10类),做如下实验:

  1. 利用回调(callbacks),设置ModelCheckpoint,把训练过程中对验证集分类精度最高的模型保存为.h5格式的文件,并且另写一个.py文件,不用重新训练模型,直接读取.h5文件和测试数据计算识别率。
  2. 利用回调(callbacks),记录TensorBoard类的日志,并且在浏览器可视化训练过程。
  3. 保存整个模型和权重,并在另外一个.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网络评估的主要内容,如果未能解决你的问题,请参考以下文章

教你如何用Keras搭建分类神经网络

神经网络手写数字识别

[Python人工智能] 三十.Keras深度学习构建CNN识别阿拉伯手写文字图像

我院研发出神经网络对抗性样本测试工具

用Keras搭建神经网络 简单模版—— CNN 卷积神经网络(手写数字图片识别)

基于CNN卷积神经网络的TensorFlow+Keras深度学习的人脸识别