首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在CNN中加入龙的注意力机制?

如何在CNN中加入龙的注意力机制?
EN

Data Science用户
提问于 2022-06-04 21:14:47
回答 1查看 878关注 0票数 1

当我为下面的图像二值分类编写CNN模型时,我试图在这个模型中添加一个注意层。我从tf.keras.layers.Attentionhttps://www.tensorflow.org/api_docs/python/tf/keras/层/注意上读到

但我仍然不知道如何使用它,任何帮助都是值得感谢的。

代码语言:javascript
运行
复制
model = keras.Sequential()

model.add(Conv2D(filters = 64, kernel_size = (3, 3), activation = 'relu', padding='same', input_shape = ((256,256,3))))
model.add(MaxPooling2D(pool_size = (2, 2), strides=(2, 2)))

model.add(Conv2D(filters = 128, kernel_size = (3, 3), activation = 'relu', padding='same'))
model.add(MaxPooling2D(pool_size = (2, 2), strides=(2, 2)))

model.add(Conv2D(filters = 256, kernel_size = (3, 3), activation = 'relu', padding='same'))
model.add(MaxPooling2D(pool_size = (2, 2), strides=(2, 2)))

model.add(Flatten())

model.add(Dense(units = 512, activation = 'relu'))
model.add(Dropout(rate = 0.5))

model.add(Dense(units = 1,activation='sigmoid'))
EN

回答 1

Data Science用户

发布于 2022-11-04 01:35:31

TL;DR:我发现通过Keras的Functional更容易使用

给定您的代码,一个示例可以是:

代码语言:javascript
运行
复制
inputs = Input((256, 256, 3))

conv1 = Conv2D(filters = 64, kernel_size = (3, 3), activation = 'relu', padding='same')(inputs)
maxpool1 = MaxPooling2D(pool_size = (2, 2), strides=(2, 2))(conv1)

# attn1 = Attention(maxpool1, ))

conv2 = Conv2D(filters = 128, kernel_size = (3, 3), activation = 'relu', padding='same')(maxpool1)
maxpool2 = MaxPooling2D(pool_size = (2, 2), strides=(2, 2))(conv2)

conv3 = Conv2D(filters = 256, kernel_size = (3, 3), activation = 'relu', padding='same')(maxpool2)
maxpool3 = MaxPooling2D(pool_size = (2, 2), strides=(2, 2))(conv3)

attn = Attention()([maxpool3, maxpool3])

flattened = Flatten()(attn)

fc1 = Dense(units = 512, activation = 'relu')(flattened)
drop1 = Dropout(rate = 0.5)(fc1)

final = Dense(units = 1,activation='sigmoid')(drop1)

model = Model(inputs=inputs, outputs=final)

长篇故事:

通常,Luong注意需要两层/两层权重来计算两者之间的映射,即“编码器”和“解码器”。可以说,任何两个顺序层都可以看作是编码器和解码器。对于你的计算机视觉模型,我们可以做一些像“自我关注”与第三Conv块。

这就是为什么我在上面的代码中做Attention()([maxpool3, maxpool3])的原因。

你也可以尝试用一个密集的图层来做,比如变形金刚,也许它会起作用。

以防万一,请查看此链接,了解更多关于注意力的信息。就我个人而言,我发现它在决定如何使用注意力方面很有用。

现在,在简历模型中使用这样的注意力可能不是最优的方法。还有其他类似的想法,但具体适用于计算机视觉模型。最流行的这种想法是挤压和激励网络。这是很容易实现和工作良好。另一个最近的想法是卷积块注意模块(CBAM),它包含两种类型的注意,并且很容易实现。

票数 1
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/111576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档