tensorflow - 在 keras 中获取中间层的输出会引发名称错误
问题描述
我想可视化胶囊网络中的层。为此,我需要中间层的形状。代码如下:
from keras.models import Model
model = Sequential()
conv1 = model.add(Conv2D(256, (9, 9), padding='valid', strides = 1, input_shape = (28, 28, 1), activation = 'relu', name = 'conv1'))
model.add(Conv2D(256, (9,9), padding='valid', strides = 2, name = 'primarycaps_conv2d'))
model.add(keras.layers.core.Reshape([-1,8]))
model.add(keras.layers.core.Lambda(squash, name = 'hello'))
layer_name = 'conv1'
intermediate_layer_model = Model(inputs=model.input,
outputs=model.get_layer(layer_name).output)
intermediate_output = intermediate_layer_model.predict(data)
引发以下错误:
NameError: name 'data' is not defined
如何克服这一点?
解决方案
参考this,我得到了如下解决方案:
model = Sequential()
conv1 = model.add(Conv2D(256, (9, 9), padding='valid', strides = 1, input_shape = (28, 28, 1), activation = 'relu', name = 'conv1'))
model.add(Conv2D(256, (9,9), padding='valid', strides = 2, name = 'primarycaps_conv2d'))
model.add(keras.layers.core.Reshape([-1,8]))
model.add(keras.layers.core.Lambda(squash, name = 'hello'))
idx = 3 # index of desired layer
input_shape = model.layers[idx].get_output_shape_at(0)
print(input_shape)
得到输出形状如下:
(None, 1152, 8).
解决了获取特定层输出的问题。
推荐阅读
- solr - Solr如何编写自定义聚合函数/分面函数
- java - 在字符串数组中搜索用户给定的字符
- android - 如何在 Retrofit 的 onResponse() 方法中设置全局值并传递给覆盖函数?
- pandas - groupby first 作为 pandas 中的字典
- python - 从 CSV 文件 python 中删除行
- php - 在 Laravel 中更新数据库中的数据的问题
- firebase - Firebase 不显示已连接的用户
- javascript - 未捕获的 ReferenceError:未定义 LoadFile 错误
- java - 两个视图,一个动画,但有一个问题
- javascript - Material UI Autocomplete Chip 多线