Keras,Conv1D:在summary()或使用plot\u model()上打印/打印内核大小信息
在keras中,我有一个涉及keras.layers.Conv1D的模型,并尝试绘制它。例如,这里有一个简单的例子:Keras,Conv1D:在summary()或使用plot\u model()上打印/打印内核大小信息,keras,rnn,Keras,Rnn,在keras中,我有一个涉及keras.layers.Conv1D的模型,并尝试绘制它。例如,这里有一个简单的例子: 从keras.models导入顺序模型 从keras.layers导入Conv1D 从keras.utils导入plot\u模型 从IPython.display导入图像,显示 seq_长度=无 M=6 内核大小=3 过滤器=1 模型=顺序() model.add( Conv1D( 过滤器=过滤器, 内核大小=内核大小, input_shape=(seq_length,M),#将
从keras.models导入顺序模型
从keras.layers导入Conv1D
从keras.utils导入plot\u模型
从IPython.display导入图像,显示
seq_长度=无
M=6
内核大小=3
过滤器=1
模型=顺序()
model.add(
Conv1D(
过滤器=过滤器,
内核大小=内核大小,
input_shape=(seq_length,M),#将此层用作模型中的第一层时,请提供input_shape参数
)
)
model.compile(loss='binary\u crossentropy',
优化器='rmsprop',
指标=[‘准确度’])
打印“可训练参数=({}[filters])*((6[input_shape[1]])x({}[kernel_size]])+(1[bias])={}”。格式(过滤器,kernel_size,M*kernel_size+1)
plot_model(model,to_file='model.png',show_shapes=True)
显示(model.summary())
显示(图像(filename='model.png'))
这给出了模型的概要和曲线图:
此外,总参数正确标识为:
(1[filters])*((6[input_shape[1]])x(3[kernel_size]])+(1[bias])=19
然而,据我所知,关于内核大小为3的信息是不存在的
问题:
对于问题1:
- 输入形状为:
(批量大小、序列长度、特征)
- 而输出形状为:
(batchSize、newSequenceLength、layerFilters)
padding='valid'
(默认值),那么内核大小可能更改的唯一数字是newSequenceLength
。使用padding='valid'
时,您将丢失序列的边框:
newSequenceLength = sequenceLength - (kernel_size - 1)
如果序列的长度为3,那么将使用这3个步骤计算内核一次。如果序列的长度为4,则内核将计算两次。前三步一次,后三步一次。如果长度为5,内核将应用3次,每组3个步骤一次。等等
但是,如果使用的是padding='same'
,则输出长度将与输入长度相同(keras将用足够的步长填充输入,因此丢失边框后的输出与输入长度相同)
为什么无
keras中的None
维度用于模型允许该维度具有任何大小的情况。对于该模型,您可以使用任何批次大小和任何序列长度
对于问题2:
我不知道。但您可以随时检查:
for layer in model.layers:
if hasattr(layer,'kernel_size'):
print(layer.kernel_size)
塔克斯。我会接受这个答案,因为它回答了我的问题,对任何开始关注Conv1D的人来说都是非常有用的。我仍然不满意为什么内核大小没有以任何方式绘制,并且担心我的理解是错误的。。。让我举一个例子:我有一个conv1D层(如示例所示),然后是一个致密层(假设有3个神经元),如果内核大小为1,那么我从7个神经元移动到3个神经元。如果从19到3是3。。。因此,在我决定模型时,内核大小应该是非常相关的信息。但当我打印它时,它甚至没有显示出来。。。这是出乎意料的……不是“神经元”,而是“参数/权重”。是的,内核越大,权重就越大。但是卷积层的目的主要是检测模式。您应该根据模式的大小来决定内核的大小。内核大小为1只不过是将通道连接在一起,但不需要寻找冗长的模式。这几乎与在3D数据中使用密集层相同。通常,最佳大小为3,您可以堆叠一系列卷积和最大池来检测更大的模式。在卷积层中,“过滤器”与神经元进行比较。
print(layer.kernel.shape)
还将打印每个过滤器中的通道数以及使用的过滤器数量。例如,以的格式(过滤高度、过滤宽度、每个层过滤的每个通道的数量、每个层输入的通道的数量、每个层使用的过滤器的数量)