首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何改变角点Conv1D卷积误差的输入维数形状?

如何改变角点Conv1D卷积误差的输入维数形状?
EN

Stack Overflow用户
提问于 2022-05-21 20:47:43
回答 1查看 122关注 0票数 0

我有一个二元分类问题。我想包括一个Conv1D层,但在从3D (https://www.tensorflow.org/api_docs/python/tf/keras/layers/Conv1D)中改变输入形状的输入形状时遇到了麻烦。

所以我的代码是

代码语言:javascript
运行
复制
#Hyperparameters
EMBEDDING_DIM = 50
MAXLEN = 500 #1000, 1400
VOCAB_SIZE =  33713

DENSE1_DIM = 64
DENSE2_DIM = 32

LSTM1_DIM = 32 
LSTM2_DIM = 16
WD = 0.001
FILTERS = 64  
KERNEL_SIZE = 5

# Stacked hybrid model
model_lstm = tf.keras.Sequential([
    tf.keras.layers.Embedding(VOCAB_SIZE+1, EMBEDDING_DIM, input_length=MAXLEN,weights=[EMBEDDINGS_MATRIX], trainable=False),
    tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(LSTM1_DIM, dropout=0.5, kernel_regularizer = regularizers.l2(WD), return_sequences=True)), 
    tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(LSTM2_DIM, dropout=0.5, kernel_regularizer = regularizers.l2(WD))), 
    tf.keras.layers.Dense(DENSE2_DIM, activation='relu'),

#    tf.keras.layers.Conv1D(FILTERS, KERNEL_SIZE, activation='relu'),

#    tf.keras.layers.Dropout(0.1),
#    tf.keras.layers.GlobalAveragePooling1D(), 
#    tf.keras.layers.Dense(1, activation='sigmoid')
])
...

它给出了这个总结

代码语言:javascript
运行
复制
Model: "sequential_6"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 embedding_10 (Embedding)    (None, 500, 50)           1685700   
                                                                 
 bidirectional_19 (Bidirecti  (None, 500, 64)          21248     
 onal)                                                           
                                                                 
 bidirectional_20 (Bidirecti  (None, 32)               10368     
 onal)                                                           
                                                                 
 dense_11 (Dense)            (None, 32)                1056      
                                                                 
=================================================================
Total params: 1,718,372
Trainable params: 32,672
Non-trainable params: 1,685,700

因此,如果我使用Conv1D层,就会得到以下错误:

代码语言:javascript
运行
复制
ValueError: Input 0 of layer "conv1d_4" is incompatible with the layer: expected min_ndim=3, found ndim=2. Full shape received: (None, 32)

例如,我尝试过将input_shape = (None,16,32)作为Conv1D层中的一个参数,但它不是这样工作的。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2022-06-10 17:09:00

您可以添加tf.keras.layers.Reshape层来更改数据的形状,如下所示。

代码语言:javascript
运行
复制
EMBEDDING_DIM = 50
MAXLEN = 500 #1000, 1400
VOCAB_SIZE =  33713

DENSE1_DIM = 64
DENSE2_DIM = 32

LSTM1_DIM = 32 
LSTM2_DIM = 16
WD = 0.001
FILTERS = 64  
KERNEL_SIZE = 5

EMBEDDINGS_MATRIX = np.zeros((VOCAB_SIZE+1, EMBEDDING_DIM))

# Stacked hybrid model
model_lstm = tf.keras.Sequential([
    tf.keras.layers.Embedding(VOCAB_SIZE+1, EMBEDDING_DIM, input_length=MAXLEN,weights=[EMBEDDINGS_MATRIX], trainable=False),
    tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(LSTM1_DIM, dropout=0.5, kernel_regularizer = tf.keras.regularizers.L1(WD), return_sequences=True)), 
    tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(LSTM2_DIM, dropout=0.5, kernel_regularizer = tf.keras.regularizers.L1(WD))), 
    tf.keras.layers.Dense(DENSE2_DIM, activation='relu'),
    tf.keras.layers.Reshape((32,1)),
    tf.keras.layers.Conv1D(FILTERS, KERNEL_SIZE, activation='relu'),
    tf.keras.layers.Dropout(0.1),
    tf.keras.layers.GlobalAveragePooling1D(), 
    tf.keras.layers.Dense(1, activation='sigmoid')
])
model_lstm.summary()

输出如下。

代码语言:javascript
运行
复制
Model: "sequential_14"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 embedding_16 (Embedding)    (None, 500, 50)           1685700   
                                                                 
 bidirectional_8 (Bidirectio  (None, 500, 64)          21248     
 nal)                                                            
                                                                 
 bidirectional_9 (Bidirectio  (None, 32)               10368     
 nal)                                                            
                                                                 
 dense_15 (Dense)            (None, 32)                1056      
                                                                 
 reshape_3 (Reshape)         (None, 32, 1)             0         
                                                                 
 conv1d (Conv1D)             (None, 28, 64)            384       
                                                                 
=================================================================
Total params: 1,718,756
Trainable params: 33,056
Non-trainable params: 1,685,700
_________________________________________________________________
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72333117

复制
相关文章

相似问题

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