【问题标题】:Using embedding layer with GRU将嵌入层与 GRU 一起使用
【发布时间】:2019-01-23 15:12:22
【问题描述】:

我有一个使用 GRU 将输入手动创建为 3D 数组 (None,10,64) 的工作代码。代码是:

model = Sequential()
model.add(GRU(300, return_sequences=False, input_shape=(None, 64)))
model.add(Dropout(0.8)) 
model.add(Dense(64, input_dim=300))       
model.add(Activation("linear"))

这将返回给定输入窗口的预测嵌入。现在我想在 GRU 上使用 keras 嵌入层。我的想法是输入一个二维数组(None, 10),并使用嵌入层将每个样本转换为对应的嵌入向量。

所以现在我有了这个:

model = Sequential()
model.add(Embedding(vocab_size, 64, weights=[embedding_matrix], input_length=10, trainable=False))
model.add(GRU(300, return_sequences=False))
model.add(Dropout(0.8)) 
model.add(Dense(64))  
model.add(Activation("linear")) 

我从总结中看到embedding层的输出是:

embedding_2 (Embedding)      (None, 10, 64) 

这是我所期望的。但是当我尝试拟合模型时,我得到了这个错误:

expected activation_2 to have shape (64,) but got array with shape (1,)

如果我评论其他层并只留下我得到的嵌入和 gru:

expected gru_5 to have shape (300,) but got array with shape (1,)

所以我的问题是,拟合手动构建的 3D 数组和嵌入层生成的数组有什么区别?

【问题讨论】:

    标签: python keras deep-learning keras-layer


    【解决方案1】:

    您的模型反映了所需的计算;但是,错误是 Y 您正在传递给模型。您正在传递一个标量目标,而不是一个大小为 (64,) 的数组。为了澄清您的输入应该是整数序列,但您的目标仍然需要是向量。

    另外,Dense 默认是线性激活的,所以你不需要Activation('linear')Dense(64) 之后。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-06
      • 1970-01-01
      • 2018-10-13
      • 2016-11-25
      • 2015-05-06
      • 1970-01-01
      • 1970-01-01
      • 2018-08-06
      相关资源
      最近更新 更多