将全连接层转换为 conv2d 并预测输出?
Posted
技术标签:
【中文标题】将全连接层转换为 conv2d 并预测输出?【英文标题】:convert fully connected layer to conv2d and predict output? 【发布时间】:2020-06-06 17:30:57 【问题描述】:我正在尝试将扁平层作为 convd2d 的输入,并使用 cifar-10 数据集预测 Densenet 上 10 类分类问题的输出。 以下代码 sn-p 出现错误。
global compression
BatchNorm = layers.BatchNormalization()(input)
relu = layers.Activation('relu')(BatchNorm)
AvgPooling = layers.AveragePooling2D(pool_size=(2,2))(relu)
flat = layers.Flatten()(AvgPooling)
# output = layers.Dense(num_classes, activation='softmax')(flat)
output = layers.Conv2D(filters=10,kernel_size=3,strides=1,activation='softmax',padding='valid')(flat)
我收到以下错误
ValueError: Input 0 is incompatible with layer conv2d_513: expected ndim=4, found ndim=2
谁能告诉我如何解决它。 提前致谢。
【问题讨论】:
为什么要在2D卷积之前将数据展平?通常情况正好相反。对于 Conv2D,您需要一个 2D 输入,并且展平层将 2D 转换为 1D。 【参考方案1】:output = layers.Conv2D(filters=10, kernel_size=(1,1),strides =(2,2))
此代码会将您的密集层更改为相应的 Conv2D 层。但为避免任何错误,您需要将softmax
添加为不同的层。应该是这样的:
not_final = layers.Activation('softmax')(output)
result = layers.Flatten()(not_final)
【讨论】:
以上是关于将全连接层转换为 conv2d 并预测输出?的主要内容,如果未能解决你的问题,请参考以下文章