2017-11-18 43 views
0

내가 잘 작동 다음과 같은 네트워크했다 발견 퍼가기 층으로 조밀 한 층을 바꿉니다Keras는 : 임베드 대 조밀 한 - ValueError를 : 입력 0 레이어 repeat_vector_9와 호환되지 않습니다 :</p> <pre><code>left = Sequential() left.add(Dense(EMBED_DIM,input_shape=(ENCODE_DIM,))) left.add(RepeatVector(look_back)) </code></pre> <p>을하지만, 내가 필요 : 예상 ndim = 2, ndim = 3

--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-119-5a5f11c97e39> in <module>() 
    29 left.add(Embedding(ENCODE_DIM, EMBED_DIM, input_length=1)) 
---> 30 left.add(RepeatVector(look_back)) 
    31 
    32 leftOutput = left.output 

/usr/local/lib/python3.4/dist-packages/keras/models.py in add(self, layer) 
    467       output_shapes=[self.outputs[0]._keras_shape]) 
    468   else: 
--> 469    output_tensor = layer(self.outputs[0]) 
    470    if isinstance(output_tensor, list): 
    471     raise TypeError('All layers in a Sequential model ' 

/usr/local/lib/python3.4/dist-packages/keras/engine/topology.py in __call__(self, inputs, **kwargs) 
    550     # Raise exceptions in case the input is not compatible 
    551     # with the input_spec specified in the layer constructor. 
--> 552     self.assert_input_compatibility(inputs) 
    553 
    554     # Collect input shapes to build layer. 

/usr/local/lib/python3.4/dist-packages/keras/engine/topology.py in assert_input_compatibility(self, inputs) 
    449          self.name + ': expected ndim=' + 
    450          str(spec.ndim) + ', found ndim=' + 
--> 451          str(K.ndim(x))) 
    452    if spec.max_ndim is not None: 
    453     ndim = K.ndim(x) 

ValueError: Input 0 is incompatible with layer repeat_vector_9: expected ndim=2, found ndim=3 
:
left = Sequential() 
left.add(Embedding(ENCODE_DIM, EMBED_DIM, input_length=1)) 
left.add(RepeatVector(look_back)) 

그럼 내가 매립층을 사용할 때 다음과 같은 오류가 발생했습니다

Dense 레이어를 Embedding 레이어로 대체 할 때 추가로 필요한 변경 사항은 무엇입니까? 감사!

답변

2

Dense 레이어의 출력 모양은 (None, EMBED_DIM)입니다. 그러나 Embedding 레이어의 출력 모양은 (None, input_length, EMBED_DIM)입니다. input_length=1을 입력하면 (None, 1, EMBED_DIM)이됩니다. Embedding 레이어 뒤에 Flatten 레이어를 추가하여 축 1을 제거 할 수 있습니다.

출력 셰이프를 인쇄하여 모델을 디버깅 할 수 있습니다. 예 :

EMBED_DIM = 128 
left = Sequential() 
left.add(Dense(EMBED_DIM, input_shape=(ENCODE_DIM,))) 
print(left.output_shape) 
(None, 128) 

left = Sequential() 
left.add(Embedding(ENCODE_DIM, EMBED_DIM, input_length=1)) 
print(left.output_shape) 
(None, 1, 128) 

left.add(Flatten()) 
print(left.output_shape) 
(None, 128)