gpt4 book ai didi

keras - 内核大小应该与一维卷积中的字长相同吗?

转载 作者:行者123 更新时间:2023-12-04 15:51:50 24 4
gpt4 key购买 nike

在 CNN 文献中,当它扫过一个句子时,经常说明内核大小与一个人拥有的词汇表中最长单词的大小相同。

所以如果我们用embedding来表示文本,那么kernel大小不应该和embedding维数一样,这样才能得到一个词一个词地扫过一样的效果吗?

尽管字长不同,但我看到使用的内核大小不同。

enter image description here

最佳答案

嗯...这些是一维卷积,其内核是 3 维的。

的确,这 3 个维度中的一个必须与嵌入大小匹配(否则拥有这个大小将毫无意义)

这三个维度是:

(length_or_size, input_channels, output_channels)  

地点:

  • length_or_size (kernel_size):任何你想要的。在图中,有 6 个不同的过滤器,大小分别为 4、4、3、3、2、2,用“垂直”维度表示。
  • input_channels(自动 embedding_size):嵌入的大小 - 这是强制性的(在 Keras 中这是自动的并且几乎不可见),否则乘法不会不要使用整个嵌入,这是没有意义的。在图中,过滤器的“水平”维度始终为 5(与单词大小相同——这不是空间维度)。
  • output_channels (filters):你想要的任何东西,但似乎图片是在谈论每个过滤器只有 1 个 channel ,因为它被完全忽略了,如果代表的话会是像“深度”之类的东西。

所以,您可能混淆了哪些维度。当你定义一个转换层时,你会:

Conv1D(filters = output_channels, kernel_size=length_or_size)

input_channels 自动来自嵌入(或上一层)。

在 Keras 中创建这个模型

要创建这个模型,它会是这样的:

sentence_length = 7
embedding_size=5

inputs = Input((sentence_length,))
out = Embedding(total_words_in_dic, embedding_size)

现在,假设这些过滤器只有 1 个 channel (因为图像似乎没有考虑它们的深度......),我们可以将它们以 2 个 channel 对的形式加入:

size1 = 4
size2 = 3
size3 = 2
output_channels=2

out1 = Conv1D(output_channels, size1, activation=activation_function)(out)
out2 = Conv1D(output_channels, size2, activation=activation_function)(out)
out3 = Conv1D(output_channels, size3, activation=activation_function)(out)

现在,让我们折叠空间维度并保留两个 channel :

out1 = GlobalMaxPooling1D()(out1)
out2 = GlobalMaxPooling1D()(out2)
out3 = GlobalMaxPooling1D()(out3)

并创建 6 channel 输出:

out = Concatenate()([out1,out2,out3])

现在有一个从 6 channel 到 2 channel 的神秘跳跃,无法用图片解释。也许他们正在应用 Dense 层或其他东西......

#????????????????
out = Dense(2, activation='softmax')(out)

model = Model(inputs, out)

关于keras - 内核大小应该与一维卷积中的字长相同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53589471/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com