2016-09-19 6 views
4

로 변환 내가 이전 계층에서 가중치 행렬을 재사용하려합니다. 장난감 예를 들어 나는 이런 식으로 뭔가를 할 :Keras - 이전 계층에서 재사용 무게 - keras 텐서

import numpy as np 
from keras.layers import Dense, Input 
from keras.layers import merge 
from keras import backend as K 
from keras.models import Model 

inputs = Input(shape=(4,)) 
inputs2 = Input(shape=(4,)) 
dense_layer = Dense(10, input_shape=(4,)) 
dense1 = dense_layer(inputs) 

def my_fun(my_inputs): 
    w = my_inputs[0] 
    x = my_inputs[1] 

    return K.dot(w, x) 

merge1 = merge([dense_layer.W, inputs2], mode=my_fun) 

문제는 dense_layer.W가 keras 텐서되지 않는 것입니다.

Exception: Output tensors to a Model must be Keras tensors. Found: dot.0 

Keras 텐서에 dense_layer.W을 변환하는 방법에 대한 생각 : 그래서 나는 다음과 같은 오류가 발생합니다?

감사

답변

0

나는이 같은 병합 층을 사용할 수 있다고 생각하지 않습니다.

그러나 귀하의 질문에 대답하기 위해, 당신은 아마 무게를 연결 한 사용자 층을 만들어야합니다. this example을보십시오.

그렇지 층의 가중치를 액세스하는 방법은 그 층에 get_weights() 메소드를 사용하는 것,이 가중치를 함유 NumPy와 배열의 목록 retrun 것이다. Dense 레이어의 경우에는 가중치와 바이어스가 포함됩니다.

0

이가지 경우는 당신이 뭘 하려는지에 따라 해결책이있다 : 당신은 W 행렬을 공유하고 싶습니다

  1. 을 두 작업 사이에서 W 행렬은 훈련 중 또는 다른 이유로 변경된 경우에도 동일하게 유지됩니다. 그런 다음 당신은 당신의 조밀 한 층에서 텐서로 W 행렬 dense.weights[0]를 사용해야합니다.

  2. 코드가 작성 될 때 W 행렬의 값만 사용하려고하고이 값이 절대로 변경되지 않으면 K.constant(dense.get_weights[0])을 사용하여 가중치 배열로 가중치를 추출하고 텐서로 변환하십시오.