【发布时间】:2020-10-20 16:15:31
【问题描述】:
我想创建一个生成字符 LSTM 网络。这个想法是:模型采用最后 32 个现有字符并基于它们生成另一个字符。一次又一次。
这是模型,很简单:
model = Sequential([
Input(shape=[32, 1]),
LSTM(64, return_sequences=True),
LSTM(64),
Dense(len(corpus.keys()), activation='softmax', use_bias=False),
])
问题是:文本中字符的频率差异很大。频率最低的字母出现了 326 次,而最频繁的字母出现了 56190 次。看看条形图就知道了。
即使经过 200 个 epoch 的训练,模型所能预测的只是空间,因为它只是最频繁出现的字符。因此,损失在训练期间正在减少。
我已经尝试过更复杂和更简单的模型,结果总是一样。模型只记住频率。
编辑:这里是notebook
【问题讨论】:
-
你应该根据频率来衡量损失。角色的损失权重可以简单地是频率的倒数,也可以是基于该概念的其他函数。
标签: python tensorflow keras lstm recurrent-neural-network