【发布时间】:2021-04-08 07:08:09
【问题描述】:
我正在尝试在 Keras 中实现神经网络模型,但我遇到了维度问题。根据模型架构,我应该得到 1 作为最后(全连接)层的输出维度,但我得到的是 2D 数据作为输出。
我正在尝试从 paper 实现图 4。
我的实现如下:
import numpy as np
from tensorflow.keras import layers, Model
from tensorflow.keras.optimizers import Adam, RMSprop
from tensorflow.keras.utils import plot_model
from tensorflow.python.keras.regularizers import l2
from keras.datasets import imdb
from keras.preprocessing import sequence
def get_model(vocabulary_size, embedding_dim, input_length, summary=True):
inputs = layers.Input(shape=(input_length))
x = layers.Embedding(vocabulary_size, embedding_dim)(inputs)
branch1 = layers.Conv1D(128, kernel_size=(3),padding='same',kernel_regularizer=l2(0.01), activation='relu')(x)
branch1 = layers.MaxPool1D(pool_size=(2))(branch1)
branch1 = layers.Dropout(0.5)(branch1)
branch1 = layers.BatchNormalization()(branch1)
branch1 = layers.LSTM(128, return_sequences=True)(branch1)
branch2 = layers.Conv1D(128, kernel_size=(5),padding='same',kernel_regularizer=l2(0.01), activation='relu')(x)
branch2 = layers.MaxPool1D(pool_size=(2))(branch2)
branch2 = layers.Dropout(0.5)(branch2)
branch2 = layers.BatchNormalization()(branch2)
branch2 = layers.LSTM(128, return_sequences=True)(branch2)
branch3 = layers.Conv1D(128, kernel_size=(7),padding='same',kernel_regularizer=l2(0.01), activation='relu')(x)
branch3 = layers.MaxPool1D(pool_size=(2))(branch3)
branch3 = layers.Dropout(0.5)(branch3)
branch3 = layers.BatchNormalization()(branch3)
branch3 = layers.LSTM(128, return_sequences=True)(branch3)
branch4 = layers.Conv1D(128, kernel_size=(9),padding='same',kernel_regularizer=l2(0.01), activation='relu')(x)
branch4 = layers.MaxPool1D(pool_size=(2))(branch4)
branch4 = layers.Dropout(0.5)(branch4)
branch4 = layers.BatchNormalization()(branch4)
branch4 = layers.LSTM(128, return_sequences=True)(branch4)
concat = layers.concatenate([branch1, branch2, branch3, branch4], name='Concatenate')
outputs = layers.Dense(1, activation='sigmoid')(concat)
model = Model(inputs, outputs)
model.compile(loss='binary_crossentropy', optimizer=Adam(lr=1e-3), metrics='accuracy')
print(model.summary())
return model
EMBEDDING_DIM = 32
VOCABULARY_SIZE = 5000
seq_length = 500
my_model = get_model(VOCABULARY_SIZE, EMBEDDING_DIM, seq_length)
【问题讨论】:
-
嗨,欢迎来到 StackOverflow。在提问之前,请参阅指南stackoverflow.com/help/how-to-ask。您需要一个重现问题的代码的最小工作示例。为此,您还需要提供数据和其余代码。
-
@gaussian-prior 答案将根据需要将其设为 1。但是研究论文仍然会详细介绍如何处理 LSTM 以及最后隐藏是否足够。我无法访问该论文。
标签: machine-learning keras deep-learning tensorflow2.0