2017-10-03 6 views
0

언어 모델링에 노력 중이며 어휘가 큽니다. 그래서 tensorflow에서 sampled_softmax_loss을 사용하고 싶습니다. 문제는 (그 값이 훈련 후 변경하지 마십시오)keras는 그래프에 외부 학습 가능 변수를 추가합니다.

그래서 내가 자동으로 계산 그래프 건물에 추가해야한다고 생각 무게과 sampled_softmax_loss 함수의 인수입니다 편견이하지 학습 가능한 것이다 keras 모델에 의해,하지만 나는 많은 시간을 보냈지 만 여전히 그렇게하는 적절한 방법을 찾지 못했습니다.

그래서 다시 한번. 난 케라 계산 그래프에 외부 trainable 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') 

답변

1

는 드디어

이의 우리가과 편견 B (W) 무게를 을 훈련 할 필요가 있다고 가정 해 봅시다 해결 방법을 발견했다 우리의 모델입니다.

따라서 해결 방법은 trainable 레이어 중 하나에 추가하는 것입니다.

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

우리는 예를 들면 I 순차 모델 실험 한, 학습 가능한 층 변수를 추가 매우 중요하며, 모델

model.compile(...) 

를 컴파일 할 때 추가 [W B] Activation 레이어로 보내면 실제로 조정할 수 없습니다.

관련 문제