前言:
keras默认提供了如何获取某一个层的某一个节点的输出,但是没有提供如何获取某一个层的输出的接口,所以有时候我们需要获取某一个层的输出,则需要自己编写代码,但是鉴于keras高层封装的特性,编写起来实际上很简单,本文提供两种常见的方法来实现,基于上一篇文章的模型和代码: keras自定义回调函数查看训练的loss和accuracy
一、模型加载以及各个层的信息查看
从前面的定义可知,参见上一篇文章,一共定义了8个网络层,定义如下:
model.add(Convolution2D(filters=6, kernel_size=(5, 5), padding='valid', input_shape=(img_rows, img_cols, 1), activation='tanh'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Convolution2D(filters=16, kernel_size=(5, 5), padding='valid', activation='tanh'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(120, activation='tanh'))
model.add(Dense(84, activation='tanh'))
model.add(Dense(n_classes, activation='softmax'))
这里每一个层都没有起名字,实际上最好给每一个层取一个名字,所以这里就使用索引来访问层,如下:
for index in range(8):
layer=model.get_layer(index=index)
# layer=model.layers[index] # 这样获取每一个层也是一样的
print(model)
'''运行结果如下:
'''
当然由于 model.laters是一个列表,所以可以一次性打印出所有的层信息,即
print(model.layers) # 打印出所有的层
二、模型的加载
准备测试数据
# 训练参数
lea