python - ValueError:维度必须为 4,但对于输入形状为 [?,10,16,16], [3] 的“capsule_2/transpose_4”(操作:“Transpose”)为 3
问题描述
我正在尝试使用胶囊网络进行二进制文本分类。我使用预训练的 fasttext 词嵌入来矢量化我的数据集
,这是我的模型定义
gru_len = 128
Routings = 5
Num_capsule = 10
Dim_capsule = 16
dropout_p = 0.
rate_drop_dense = 0.3
def get_model(embedding_matrix, sequence_length, dropout_rate, recurrent_units, dense_size):
input1 = Input(shape=(sequence_length,))
embed_layer = Embedding(embedding_matrix.shape[0], embedding_matrix.shape[1],
weights=[embedding_matrix], trainable=False)(input1)
embed_layer = SpatialDropout1D(rate_drop_dense)(embed_layer)
x = Bidirectional(
GRU(gru_len, activation='relu', dropout=dropout_p, recurrent_dropout=dropout_p, return_sequences=True))(embed_layer)
capsule = Capsule(num_capsule=Num_capsule, dim_capsule=Dim_capsule,routings=Routings,share_weights=True)(x)
capsule = Flatten()(capsule)
capsule = Dropout(dropout_p)(capsule)
output = Dense(1, activation='sigmoid')(capsule)
model = Model(inputs=input1, outputs=output)
model.compile(
loss='binary_crossentropy',
optimizer='adam',
metrics=['accuracy'])
model.summary()
return model
但是当模型开始训练时,我得到了一个错误。错误日志如下:
ValueError: Dimension must be 4 but is 3 for 'capsule_3/transpose_4' (op: 'Transpose') with input shapes: [?,10,16,16], [3].
解决方案
推荐阅读
- c++ - 如何将 EEPROM 中的 char* 设置为 html 输入字段默认值
- c - 如何在文件中查找字符串并使用 C 在文件中紧接该搜索字符串的下一行写入新字符串
- sql - 在 SQL Server 中生成新的事务 ID
- java - 在android中下载存储和混合.ts文件的正确方法?
- google-cloud-build - 谷歌云构建:在谷歌云存储库上克隆私有存储库失败
- excel - 自动填充无法正常工作 (VBA)
- multiple-columns - 使用 awk 和 if - else if 语句操作数据列
- angular - 升级 Angular 6 时的 Webpack 警告
- javascript - 在 React + Redux 中使用新的生命周期方法通过更改 id 来获取数据
- php - Laravel 在 JSON 中获取数据时无法识别 $this->id