【问题标题】:keras add external trainable variable to graphkeras 将外部可训练变量添加到图形
【发布时间】:2018-03-14 15:14:46
【问题描述】:

我在做语言建模,词汇量很大。所以我想使用来自张量流的sampled_softmax_loss。问题是作为 sampled_softmax_loss 函数的参数的 weightsbiases 似乎不可训练(它们的值在训练后不会改变)

所以我想我应该将它们添加到由 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')

【问题讨论】:

    标签: tensorflow keras


    【解决方案1】:

    我终于找到了解决方法

    假设我们需要用我们的模型训练权重W和偏差b

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

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

    什么时候可以编译模型

    model.compile(...)
    

    将变量添加到可训练层非常重要,例如我用 Sequential 模型进行了实验,将 [W, b] 添加到 Activation 层并不能使它们真正可训练。

    【讨论】:

    猜你喜欢
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    • 2016-09-16
    相关资源
    最近更新 更多