私は言語モデリングに取り組んでおり、ボキャブラリは大きいです。ですからテンソルフローのsampled_softmax_lossを使いたいと思います。問題はsampled_softmax_loss関数の引数です重みと偏見は、だから私は、私は自動的に計算グラフの建物にそれらを追加する必要があることを推測するkerasはグラフに外部学習可能変数を追加します。
(それらの値は、トレーニング後に変更されません)トレーニング可能ではないようだということですkerasモデルでは、私は多くの時間を費やし、それを行うための適切な方法をまだ見つけていない。
だから、もう一度。 はケラス計算グラフに外部の訓練可能なtf.Variablesを追加したいと思います。誰もがそうする方法を知っていますか?
私のモデル(頭と尾)
input_sentence = Input(shape=(INPUT_LENGTH,), dtype='int32')
words = Embedding(embedding_matrix.shape[0], embedding_matrix.shape[1],
weights=[embedding_matrix], trainable=True)(input_sentence)
...
context = Dense(256, activation='tanh')(context)
model = Model(inputs=input_sentence, outputs=context, name=name)
損失
def softmax_fine_loss(labels, logits, transposed_W=None, b=None):
res = tf.map_fn(lambda (__labels, __logits): tf.nn.sampled_softmax_loss(transposed_W, b, __labels, __logits,
num_sampled=1000, num_classes=OUTPUT_COUNT+1),
(labels, logits), dtype=tf.float32)
return res
loss = lambda labels, logits: softmax_fine_loss(labels, logits, transposed_W=transposed_W, b=b)
model_truncated.compile(optimizer=optimizer, loss=loss, sample_weight_mode='temporal')