如何申请屏蔽层连续CNN模型Keras?

问题描述 投票:1回答:1

我在RNN / LSTM模型施加掩模层细胞神经网络的问题。

我的数据不是原始图象,而是我转换成(16,34,4)(channels_first)的形状。的数据是顺序的,且最长步长是22。因此,对于不变的方式,我设置时间步长为22。由于它可能是短于22个步骤,我填他人与np.zeros。然而,对于0填充数据,它的所有数据集之间的一半左右,所以用0补白,训练不能达到这么多无用的数据很不错的成绩。然后我想添加蒙版,取消这些0填充数据。

这里是我的代码。

mask = np.zeros((16,34,4), dtype = np.int8)  
input_shape = (22, 16, 34, 4)  
model = Sequential()  
model.add(TimeDistributed(Masking(mask_value=mask), input_shape=input_shape, name = 'mask'))  
model.add(TimeDistributed(Conv2D(100, (5, 2), data_format = 'channels_first', activation = relu), name = 'conv1'))  
model.add(TimeDistributed(BatchNormalization(), name = 'bn1'))  
model.add(Dropout(0.5, name = 'drop1'))  
model.add(TimeDistributed(Conv2D(100, (5, 2), data_format = 'channels_first', activation = relu), name ='conv2'))  
model.add(TimeDistributed(BatchNormalization(), name = 'bn2'))  
model.add(Dropout(0.5, name = 'drop2'))  
model.add(TimeDistributed(Conv2D(100, (5, 2), data_format = 'channels_first', activation = relu), name ='conv3'))  
model.add(TimeDistributed(BatchNormalization(), name = 'bn3'))  
model.add(Dropout(0.5, name = 'drop3'))  
model.add(TimeDistributed(Flatten(), name = 'flatten'))  
model.add(GRU(256, activation='tanh', return_sequences=True, name = 'gru'))  
model.add(Dropout(0.4, name = 'drop_gru'))  
model.add(Dense(35, activation = 'softmax', name = 'softmax'))  
model.compile(optimizer='Adam',loss='categorical_crossentropy',metrics=['acc'])

这里的模型结构。 model.summary():

_________________________________________________________________  
Layer (type)                 Output Shape              Param #     
=================================================================  
mask (TimeDist (None, 22, 16, 34, 4)     0           
_________________________________________________________________  
conv1 (TimeDistributed)      (None, 22, 100, 30, 3)    16100       
_________________________________________________________________  
bn1 (TimeDistributed)        (None, 22, 100, 30, 3)    12          
_________________________________________________________________  
drop1 (Dropout)              (None, 22, 100, 30, 3)    0           
_________________________________________________________________  
conv2 (TimeDistributed)      (None, 22, 100, 26, 2)    100100      
_________________________________________________________________  
bn2 (TimeDistributed)        (None, 22, 100, 26, 2)    8           
_________________________________________________________________  
drop2 (Dropout)              (None, 22, 100, 26, 2)    0           
_________________________________________________________________  
conv3 (TimeDistributed)      (None, 22, 100, 22, 1)    100100      
_________________________________________________________________  
bn3 (TimeDistributed)        (None, 22, 100, 22, 1)    4           
_________________________________________________________________  
drop3 (Dropout)              (None, 22, 100, 22, 1)    0           
_________________________________________________________________  
flatten (TimeDistributed)    (None, 22, 2200)          0           
_________________________________________________________________  
gru (GRU)                    (None, 22, 256)           1886976     
_________________________________________________________________  
drop_gru (Dropout)           (None, 22, 256)           0           
_________________________________________________________________  
softmax (Dense)              (None, 22, 35)            8995        
=================================================================  
Total params: 2,112,295  
Trainable params: 2,112,283  
Non-trainable params: 12  
_________________________________________________________________

对于mask_value,我试着用0或这款面膜的结构,但也的作品,它仍然通过所有与一半0垫衬的数据串。 谁能帮我?

B.T.W.,我用TimeDistributed这里连接RNN,我知道另外一个叫做ConvLSTM2D。有谁知道有什么区别? ConvLSTM2D需要更多的PARAMS的模型,并获得培训比TimeDistributed慢得多......

keras conv-neural-network lstm mask masking
1个回答
0
投票

不幸的是屏蔽尚未被Keras转化率层的支持。已经有发布了关于这个Keras Github的页面上几个问题,here is the one与话题的最实质性的对话。看来,有一些挂断实现细节和问题未曾解决。

在讨论中提出的解决方法是让在序列填充字符明确嵌入并进行全局池。 Here is another解决办法,我发现(我使用的情况下没有用,但也许对你有所帮助) - 保持遮罩阵列通过乘法合并。

您还可以看看周围this question谈话是与你相似。

© www.soinside.com 2019 - 2024. All rights reserved.