2016-12-03 3 views
2

this blog에 주어진 예제를 따라 자동 인코딩 모델을 작성하려고합니다.에 대한 디코더 계층의 정의 nnist 경우에 대한 자동 인코딩 모델

input_img = Input(shape=(784,)) 
encoded = Dense(128, activation='relu')(input_img) 
encoded = Dense(64, activation='relu')(encoded) 
encoded = Dense(32, activation='relu')(encoded) 
decoded = Dense(64, activation='relu')(encoded) 
decoded = Dense(128, activation='relu')(decoded) 
decoded = Dense(784, activation='sigmoid')(decoded) 

# this model maps an input to its reconstruction 
autoencoder = Model(input=input_img, output=decoded) 

encoded_input = Input(shape=(encoding_dim,)) 
decoder_layer = autoencoder.layers[-1] 
decoder = Model(input=encoded_input, output=decoded) 
autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy') 

내가 만든 수정은 원래의 게시물에 decoder = Model(input=encoded_input, output=decoder_layer(encoded_input))으로 작성되었습니다 decoder = Model(input=encoded_input, output=decoded)이다. 이전 버전은 단일 숨겨진 레이어에서 작동합니다. 그래서 위의 수정을 한 것입니다. 그러나 위의 모델을 컴파일하면 다음과 같은 오류 메시지가 나타납니다. 모든 제안은 높이 평가됩니다.

Traceback (most recent call last): 
File "train.py", line 37, in <module> 
decoder = Model(input=encoded_input, output=decoded) 
File "tfw/lib/python3.4/site-packages/Keras-1.0.3-py3.4.egg/keras/engine/topology.py", line 1713, in __init__ 
str(layers_with_complete_input)) 
Exception: Graph disconnected: cannot obtain value for tensor Tensor("input_1:0", shape=(?, 784), dtype=float32) at layer "input_1". The following previous layers were accessed without issue: [] 

답변

0

나는이 같은 문제가 있었지만 어수선하지만 효과적인 솔루션을 만들었습니다. 디코더를 정의하는 행을 다음과 같이 변경하십시오.

decoder = Model(input=encoded_input, output=autoencoder.layers[6](autoencoder.layers[5](autoencoder.layers[4](encoded_input)))) 

오류는 끊어진 그래프가 있음을 나타냅니다. 이 경우, encoded_input으로 정의 된 입력 텐서는 최종 디코딩 레이어 (784 차원의 고밀도 레이어)로 정의되는 최종 출력 텐서로 직접 공급됩니다. 중간 텐서 (64 및 128 치수의 고밀도 층)는 건너 뛴다. 내 솔루션은 각 레이어가 다음 레이어의 입력으로 사용되도록 레이어를 중첩합니다. 가장 안쪽의 텐서는 encoded_input을 입력으로 사용합니다.