在Keras中将LSTM与嵌入层结合

时间:2018-10-16 13:56:57

标签: r keras

我正在尝试设计一种在R Keras中看起来像这样的网络体系结构:

Time Series data (LSTM) ---------------------\
                                              Concatenation ---> Output
Categorical variables (Embedding layers) ----/

所有这些都有一个时间序列数据,其中增加了一些分类变量。这是我的代码:

library(keras)

# First embedding layer
input_1 <- layer_input(shape = 1)
input_1_embedding <- layer_embedding(input_1, 50, 5)

# Second embedding layer
input_2 <- layer_input(shape = 1)
input_2_embedding <- layer_embedding(input_2, 100, 10) 

# LSTM layer
lstm_input <- layer_input(batch_shape = c(32, 5, 1))
lstm <- layer_lstm(lstm_input, 5, stateful = TRUE)

# Concatenate both - the error happens here
outputs <- layer_concatenate(list(input_1_embedding, input_2_embedding, lstm)) %>% 
  layer_dense(units = 1)

model <- keras_model(inputs = list(input_1, input_2, lstm_input), outputs = outputs)

我遇到以下错误A Concatenate layer requires inputs with matching shapes except for the concat axis. Got inputs shapes: [(None, 1, 5), (None, 1, 10), (32, 5)]

据我所知,这是来自以下事实:我正在对LSTM进行大小为32的批处理训练,而嵌入层未批处理。我试图将batch_shape引入嵌入层,但这在训练时会导致错误,因为并非所有批次都包含所有嵌入。

我还尝试在嵌入后引入批处理形状,但到目前为止还没有运气。有什么方法可以实现上述网络架构?

0 个答案:

没有答案