input1
50 개의 값을 input2
포함하고 25 개의 값을 포함 하는 두 가지 유형의 입력 시퀀스가 있습니다 . 기능 API에서 LSTM 모델을 사용하여이 두 시퀀스 유형을 결합하려고했습니다. 그러나 두 입력 시퀀스의 길이가 다르기 때문에 현재 수행중인 작업이 올바른지 궁금합니다. 내 코드는 다음과 같습니다.
input1 = Input(shape=(50,1))
x1 = LSTM(100)(input1)
input2 = Input(shape=(25,1))
x2 = LSTM(50)(input2)
x = concatenate([x1,x2])
x = Dense(200)(x)
output = Dense(1, activation='sigmoid')(x)
model = Model(inputs=[input1,input2], outputs=output)
더 구체적으로, 입력 길이가 다른 두 개의 LSTM 레이어 (예 : 제 경우에는 50과 25)를 결합하는 방법을 알고 싶습니다. 필요한 경우 더 자세한 정보를 제공해 드리겠습니다.
실제로 문제는 시퀀스 길이가 다른 NLP와 같은 작업에서 매우 일반적입니다. 귀하의 의견 return_sequences=False
에서 우리의 관행에서 일반적이지 않은 사용 을 통해 이전 출력을 모두 버리고 일반적으로 성능이 낮은 모델을 생성합니다.
참고 : 신경망 아키텍처 설계에는 궁극적 인 솔루션이 없습니다.
제가 제안 할 수있는 것은 다음과 같습니다.
방법 1 (사용자 정의 레이어가 필요하지 않음)
두 LSTM에서 동일한 잠재 차원을 사용하고 2 차원으로 쌓아서 하나의 큰 은닉 계층 텐서로 취급 할 수 있습니다.
input1 = Input(shape=(50,1))
x1 = LSTM(100, return_sequences=True)(input1)
input2 = Input(shape=(25,1))
x2 = LSTM(100, return_sequences=True)(input2)
x = concatenate([x1,x2], axis=1)
# output dimension = (None, 75, 100)
동일한 잠재 차원을 원하지 않는 경우 다른 사람들이 수행하는 작업은 일반적으로 고밀도 레이어로 구성된 매핑 레이어라고 부르는 부분을 1 개 더 추가하는 것입니다. 이 접근 방식은 더 많은 변수를 가지고 있으므로 모델을 학습하기가 더 어렵습니다.
input1 = Input(shape=(50,1))
x1 = LSTM(100, return_sequences=True)(input1)
input2 = Input(shape=(25,1))
x2 = LSTM(50, return_sequences=True)(input2)
# normally we have more than 1 hidden layer
Map_x1 = Dense(75)(x1)
Map_x2 = Dense(75)(x2)
x = concatenate([Map_x1 ,Map_x2 ], axis=1)
# output dimension = (None, 75, 75)
또는 출력을 평평하게 만듭니다 (둘 다).
input1 = Input(shape=(50,1))
x1 = LSTM(100, return_sequences=True)(input1)
input2 = Input(shape=(25,1))
x2 = LSTM(50, return_sequences=True)(input2)
# normally we have more than 1 hidden layer
flat_x1 = Flatten()(x1)
flat_x2 = Flatten()(x2)
x = concatenate([flat_x1 ,flat_x2 ], axis=1)
# output (None, 2650)
방법 2 (사용자 지정 레이어 필요)
사용자 지정 레이어를 만들고주의 벡터를 생성하는주의 메커니즘을 사용하고 해당주의 벡터를 LSTM 출력 텐서의 표현으로 사용합니다. 다른 사람들이하고 더 나은 성능을 달성하는 것은주의 벡터를 표현으로 사용하여 LSTM의 마지막 은닉 상태 (모델에서만 사용)를 사용하는 것입니다.
참고 : 연구에 따르면 다른 유형의주의는 거의 동일한 성능을 제공하므로 계산 속도가 더 빠르기 때문에 "Scaled Dot-Product Attention"을 권장합니다.
input1 = Input(shape=(50,1))
x1 = LSTM(100, return_sequences=True)(input1)
input2 = Input(shape=(25,1))
x2 = LSTM(50, return_sequences=True)(input2)
rep_x1 = custom_layer()(x1)
rep_x2 = custom_layer()(x2)
x = concatenate([rep_x1 ,rep_x2], axis=1)
# output (None, (length rep_x1+length rep_x2))
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다