Keras에서 입력 크기가 다른 두 개의 LSTM 레이어를 결합하는 방법은 무엇입니까?

EmJ

input150 개의 값을 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)를 결합하는 방법을 알고 싶습니다. 필요한 경우 더 자세한 정보를 제공해 드리겠습니다.

로나 크리트 W.

실제로 문제는 시퀀스 길이가 다른 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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

두 개의 데이터 프레임을 서로 다른 크기의 행으로 결합하는 방법은 무엇입니까?

분류에서Dev

0과 n 사이에 2의 배수를 표시하기 위해 JavaScript에서 두 개의 다른 함수를 결합하는 방법은 무엇입니까?

분류에서Dev

awk에서 두 파일의 길이가 다른 두 입력 파일에서 일치하는 레코드를 얻는 방법은 무엇입니까?

분류에서Dev

단일 POSIX 스레드에서 두 개의 서로 다른 대기 메커니즘을 결합하는 방법은 무엇입니까?

분류에서Dev

두 개의 다른 디스크 드라이브가있는 랩톱에서 두 개의 운영 체제를 유지하는 방법은 무엇입니까?

분류에서Dev

두 개의 다른 qgis 레이어의 기능을 반복하는 방법은 무엇입니까?

분류에서Dev

두 개의 다른 루프에서 두 개의 증가 된 값의 합계를 계산하는 방법은 무엇입니까?

분류에서Dev

grep 출력의 모든 줄에 다른 접두사를 추가하는 방법은 무엇입니까?

분류에서Dev

matplotlib에서 크기가 다른 두 그림을 결합하는 방법은 무엇입니까?

분류에서Dev

Rails에서이 두 개의 다른 has_manys를 하나로 병합하는 방법은 무엇입니까?

분류에서Dev

SCDF에서 두 개의 다른 출력 채널로 메시지를 보내는 방법은 무엇입니까?

분류에서Dev

두 개의 연속 입력을 두 개의 다른 변수에 할당하는 방법은 무엇입니까?

분류에서Dev

라 라벨 몰틴 카트에 크기가 다른 동일한 ID의 제품을 두 개 이상 추가하는 방법은 무엇입니까?

분류에서Dev

두 개의 다른 쿼리를 하나의 테이블로 결합하는 방법은 무엇입니까?

분류에서Dev

보기 페이지에 두 개의 다른 목록을 표시하는 방법은 무엇입니까?

분류에서Dev

CSS에서 부모가 다른 두 요소를 결합하는 방법은 무엇입니까?

분류에서Dev

두 개의 다른 테이블에서 두 열의 MIN 및 MAX를 찾는 방법은 무엇입니까?

분류에서Dev

두 개의 버튼에 두 개의 다른 라벨을 출력하는 방법은 무엇입니까?

분류에서Dev

SQLite에서 두 개의 열을 다른 열로 결합하는 방법은 무엇입니까?

분류에서Dev

CentOS에서 Nginx를 사용하여 두 개의 다른 포트로 두 개의 블록 서버 (IP 기반)를 설정하는 방법은 무엇입니까?

분류에서Dev

서로 다른 두 개의 확인란에서 두 개의 숫자를 추가하는 GUI를 만드는 방법은 무엇입니까?

분류에서Dev

서로 다른 두 개의 확인란에서 두 개의 숫자를 추가하는 GUI를 만드는 방법은 무엇입니까?

분류에서Dev

Spring MVC / Thymeleaf-하나의 입력 필드를 사용하여 두 개의 다른 테이블에 삽입하는 방법은 무엇입니까?

분류에서Dev

2 개의 서로 다른 이미지 레이어를 병합하는 방법은 무엇입니까?

분류에서Dev

f #에서 두 개의 서로 다른 형식의 시퀀스를 튜플에 결합하는 방법은 무엇입니까?

분류에서Dev

EF6 : 두 개의 다른 count () 쿼리를 하나로 결합하는 방법은 무엇입니까?

분류에서Dev

둘 다 Oracle에 두 개의 기본 키가있을 때 다른 테이블의 테이블에 삽입하는 방법은 무엇입니까?

분류에서Dev

SQL- 두 개의 다른 테이블에서 데이터를 선택하는 방법은 무엇입니까?

분류에서Dev

하나는 다른 하나의 전치 인 공유 가중치로 두 개의 레이어를 만드는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    두 개의 데이터 프레임을 서로 다른 크기의 행으로 결합하는 방법은 무엇입니까?

  2. 2

    0과 n 사이에 2의 배수를 표시하기 위해 JavaScript에서 두 개의 다른 함수를 결합하는 방법은 무엇입니까?

  3. 3

    awk에서 두 파일의 길이가 다른 두 입력 파일에서 일치하는 레코드를 얻는 방법은 무엇입니까?

  4. 4

    단일 POSIX 스레드에서 두 개의 서로 다른 대기 메커니즘을 결합하는 방법은 무엇입니까?

  5. 5

    두 개의 다른 디스크 드라이브가있는 랩톱에서 두 개의 운영 체제를 유지하는 방법은 무엇입니까?

  6. 6

    두 개의 다른 qgis 레이어의 기능을 반복하는 방법은 무엇입니까?

  7. 7

    두 개의 다른 루프에서 두 개의 증가 된 값의 합계를 계산하는 방법은 무엇입니까?

  8. 8

    grep 출력의 모든 줄에 다른 접두사를 추가하는 방법은 무엇입니까?

  9. 9

    matplotlib에서 크기가 다른 두 그림을 결합하는 방법은 무엇입니까?

  10. 10

    Rails에서이 두 개의 다른 has_manys를 하나로 병합하는 방법은 무엇입니까?

  11. 11

    SCDF에서 두 개의 다른 출력 채널로 메시지를 보내는 방법은 무엇입니까?

  12. 12

    두 개의 연속 입력을 두 개의 다른 변수에 할당하는 방법은 무엇입니까?

  13. 13

    라 라벨 몰틴 카트에 크기가 다른 동일한 ID의 제품을 두 개 이상 추가하는 방법은 무엇입니까?

  14. 14

    두 개의 다른 쿼리를 하나의 테이블로 결합하는 방법은 무엇입니까?

  15. 15

    보기 페이지에 두 개의 다른 목록을 표시하는 방법은 무엇입니까?

  16. 16

    CSS에서 부모가 다른 두 요소를 결합하는 방법은 무엇입니까?

  17. 17

    두 개의 다른 테이블에서 두 열의 MIN 및 MAX를 찾는 방법은 무엇입니까?

  18. 18

    두 개의 버튼에 두 개의 다른 라벨을 출력하는 방법은 무엇입니까?

  19. 19

    SQLite에서 두 개의 열을 다른 열로 결합하는 방법은 무엇입니까?

  20. 20

    CentOS에서 Nginx를 사용하여 두 개의 다른 포트로 두 개의 블록 서버 (IP 기반)를 설정하는 방법은 무엇입니까?

  21. 21

    서로 다른 두 개의 확인란에서 두 개의 숫자를 추가하는 GUI를 만드는 방법은 무엇입니까?

  22. 22

    서로 다른 두 개의 확인란에서 두 개의 숫자를 추가하는 GUI를 만드는 방법은 무엇입니까?

  23. 23

    Spring MVC / Thymeleaf-하나의 입력 필드를 사용하여 두 개의 다른 테이블에 삽입하는 방법은 무엇입니까?

  24. 24

    2 개의 서로 다른 이미지 레이어를 병합하는 방법은 무엇입니까?

  25. 25

    f #에서 두 개의 서로 다른 형식의 시퀀스를 튜플에 결합하는 방법은 무엇입니까?

  26. 26

    EF6 : 두 개의 다른 count () 쿼리를 하나로 결합하는 방법은 무엇입니까?

  27. 27

    둘 다 Oracle에 두 개의 기본 키가있을 때 다른 테이블의 테이블에 삽입하는 방법은 무엇입니까?

  28. 28

    SQL- 두 개의 다른 테이블에서 데이터를 선택하는 방법은 무엇입니까?

  29. 29

    하나는 다른 하나의 전치 인 공유 가중치로 두 개의 레이어를 만드는 방법은 무엇입니까?

뜨겁다태그

보관