【问题标题】:Keras embedding layer with variable length in functional API函数式 API 中可变长度的 Keras 嵌入层
【发布时间】:2018-01-09 15:26:06
【问题描述】:

我有以下适用于可变长度输入的顺序模型:

m = Sequential()
m.add(Embedding(len(chars), 4, name="embedding"))
m.add(Bidirectional(LSTM(16, unit_forget_bias=True, name="lstm")))
m.add(Dense(len(chars),name="dense"))
m.add(Activation("softmax"))
m.summary()

给出以下总结:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
embedding (Embedding)        (None, None, 4)           204       
_________________________________________________________________
bidirectional_2 (Bidirection (None, 32)                2688      
_________________________________________________________________
dense (Dense)                (None, 51)                1683      
_________________________________________________________________
activation_2 (Activation)    (None, 51)                0         
=================================================================
Total params: 4,575
Trainable params: 4,575
Non-trainable params: 0

但是,当我尝试在功能 API 中实现相同的模型时,我不知道我尝试了什么,因为输入层的形状似乎与顺序模型不同。这是我的尝试之一:

charinput = Input(shape=(4,),name="input",dtype='int32')
embedding = Embedding(len(chars), 4, name="embedding")(charinput)
lstm = Bidirectional(LSTM(16, unit_forget_bias=True, name="lstm"))(embedding)
dense = Dense(len(chars),name="dense")(lstm)
output = Activation("softmax")(dense)

这里是总结:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input (InputLayer)           (None, 4)                 0         
_________________________________________________________________
embedding (Embedding)        (None, 4, 4)              204       
_________________________________________________________________
bidirectional_1 (Bidirection (None, 32)                2688      
_________________________________________________________________
dense (Dense)                (None, 51)                1683      
_________________________________________________________________
activation_1 (Activation)    (None, 51)                0         
=================================================================
Total params: 4,575
Trainable params: 4,575
Non-trainable params: 0

【问题讨论】:

  • 也许函数式 API 无法处理可变尺寸的输入层?

标签: tensorflow keras word-embedding


【解决方案1】:

在输入层使用shape=(None,),在你的情况下:

charinput = Input(shape=(None,),name="input",dtype='int32')

【讨论】:

    【解决方案2】:

    尝试将参数input_length=None 添加到嵌入层。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-15
      • 1970-01-01
      • 1970-01-01
      • 2017-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多