tensorflow - keras 将外部可训练变量添加到图中

标签 tensorflow keras

我正在研究语言建模,词汇量很大。所以我想用 sampled_softmax_loss从 tensorflow 。问题是重量 偏差 哪些是 sampled_softmax_loss 函数的参数似乎不可训练(它们的值在训练后不会改变)

所以我想我应该将它们添加到由keras Model自动构建的计算图中,但是我花了很多时间仍然没有找到合适的方法来这样做。

所以,再一次。我要 将外部可训练 tf.Variables 添加到 keras 计算图 .有谁知道这样做的方法?

我的模型(头和尾)

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')

最佳答案

我终于找到了解决方法

假设我们需要训练权重 W 和偏见 b 与我们的模型。

所以解决方法是将它们添加到 之一可训练 我们模型的层。

model.layers[-1].trainable_weights.extend([W, b])

当我们可以编译模型时
model.compile(...)

极其重要向可训练层添加变量 ,例如我已经试验了 Sequential 模型,并且将 [W, b] 添加到激活层并不能使它们真正可训练。

关于tensorflow - keras 将外部可训练变量添加到图中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46544329/

相关文章:

python - 这个 'single' 值在梯度中代表什么?

python - 使用 TensorFlow 从 Google Drive 下载时出现 HTTP 错误

python - 如何取回 keras 损失函数(张量)的误差值

python - 具有整数序列的 Keras 示例字级模型给出 `expected ndim=3, found ndim=4`

keras 示例类型错误

python - keras自定义损失纯python(没有keras后端)

tensorflow - tensorflow 中的反向传播如何工作

python - 结合 Keras 功能模型

python - 如何让R中的keras使用Python安装的tensorflow

numpy - 使用 map_fn Slow 进行元素采样