我在Keras有一个非常简单的FFNN。
model = Sequential()
shared_embedding = Embedding(vocab_size, word_emb_dim, input_length=1, name='embedding')
model.add(shared_embedding)
model.add(Dropout(emb_dropout))
model.add(Dense(hidden_size, name='hidden',
kernel_constraint=max_norm(max_norm_size), activation='relu'))
model.add(shared_embedding)
model.add(Dense(vocab_size, name='output',
kernel_constraint=max_norm(max_norm_size), activation='softmax'))
model.compile(optimizer=optimizer, loss='sparse_categorical_crossentropy')
这是一个非常非常简单的单词模型,仅仅预测了双字母。因此,在数据中给出一个单词时,该模型应该预测下一个单词。
我的词汇量为50,000,我有大约1100万个双字母。所以不言而喻,我无法将所有目标存储在完整的热编码矩阵中。
我想要做的是将目标的整数直接用于keras,并强制keras处理它。我已经考虑过指定损失,因为sparse_categorical_crossentropy
已经足够了,但我猜不是。
任何人都知道该怎么做?
答案 0 :(得分:2)
原来我做得对了!问题是嵌入是三维的(由于无用的input_length
维度)。我不得不使用Flatten()
电话。在那之后,一切都很好!