KERA의 반복 레이어 시각적 안내서

Keras는 RNN, GRU, LSTM 등 자연 언어 처리의 귀속층에 강력한 추상화를 제공합니다.내가 처음으로 문서에서 그것들을 배우기 시작했을 때, 나는 입력 데이터의 형상을 어떻게 준비하는지, 층의 각종 속성이 출력에 어떻게 영향을 미치는지, 그리고 제공된 추상으로 이 층을 어떻게 구성하는지 잘 이해할 수 없었다.
실험을 통해 그것을 배운 후에 저는 다른 어려운 사람들에게 도움이 될 수 있도록 API에 대한 이해를 시각적으로 공유하고 싶습니다.

단일 출력


간단한 예를 들어 Keras에서 RNN층을 사용하여 전체 문장의 의미를 인코딩합니다.

자막: 마블 스튜디오
{:. 텍스트 센터}
RNN에서 이 문장을 사용하려면 먼저 숫자로 변환해야 합니다.우리는 열 인코딩, 미리 훈련된 어향량을 사용할 수도 있고, 처음부터 단어를 배울 수도 있다.간단하게 말하자면, 우리가 단어를 두 개의 숫자로 바꾸기 위해 몇 개의 단어를 삽입했다고 가정하자.

이제 이 단어들을 RNN에 전달하기 위해 우리는 모든 단어를 시간이 길고 삽입을 특징으로 간주한다.RNN 레이어를 구축하여
model = Sequential()
model.add(SimpleRNN(4, input_shape=(3, 2)))

위에서 설명한 바와 같이 다음과 같이 다양한 매개변수의 의미와 매개변수를 설정하는 이유는 다음과 같습니다.

  • _모양 입력 = (3, 2):
  • 우리는 세 글자가 있다. 나는, 예, 그로트.그래서 시간 보폭은 3.RNN 블록을 세 번 펼치기 때문에 그림에서 세 개의 블록을 볼 수 있습니다.
  • 단어마다 크기가 2인 단어를 네트워크에 삽입하여 전달합니다.

  • SimpleRN(4,…):
  • 이것은 우리가 숨겨진 층에 네 개의 단원이 있다는 것을 의미한다.
  • 따라서 그림에서 우리는 크기가 4인 숨겨진 상태가 어떻게 RNN 블록
  • 사이에서 전달되는지 보았다
  • 첫 번째 블록의 경우 이전 출력이 없으므로 이전 숨겨진 상태는 [0, 0, 0]로 설정됩니다.
  • 따라서 전체 문장에 대해 우리는 RNN 층에서 크기가 4인 벡터를 출력합니다. 그림과 같습니다. 이 층의 출력 모양을 인쇄하여 이를 검증할 수 있습니다.
    import tensorflow as tf
    from tensorflow.keras.layers import SimpleRNN
    
    x = tf.random.normal((1, 3, 2))
    
    layer = SimpleRNN(4, input_shape=(3, 2))
    output = layer(x)
    
    print(output.shape)
    # (1, 4)
    
    그림에서 보듯이 우리는 무작위 입력 데이터를 만들었는데 그 중 한 문장에 세 개의 단어가 있고 각 단어의 삽입 크기는 2이다.LSTM 레이어를 통과하여 우리는 이 말의 크기가 4라는 표시를 얻었다.
    이것은 밀집층과 결합하여 감정 분석이나 텍스트 분류와 유사한 구조를 구축할 수 있다.
    model = Sequential()
    model.add(SimpleRNN(4, input_shape=(3, 2)))
    model.add(Dense(1))
    

    다수출


    Keras는 RNN 유닛의 출력을 제어하기 위해 return_sequences 매개변수를 제공합니다.만약 우리가 그것을 True 로 설정한다면, 이것은 마지막 단원만 되돌려주는 것이 아니라 전개된 모든 RNN 단원의 출력을 되돌려주는 것을 의미한다.
    model = Sequential()
    model.add(SimpleRNN(4, input_shape=(3, 2), 
                        return_sequences=True))
    

    위에서 말한 바와 같이, 우리는 문장의 모든 단어 크기가 4인 출력 벡터를 얻었다.
    이것은 아래의 코드를 통해 검증할 수 있다. 그 중에서 우리는 세 개의 단어를 포함하는 문장을 보냈는데, 각 단어의 삽입 크기는 2이다.그림에서 보듯이 이 층은 단어의 벡터 크기가 4인 3개의 출력을 되돌려줍니다.
    import tensorflow as tf
    from tensorflow.keras.layers import SimpleRNN
    
    x = tf.random.normal((1, 3, 2))
    
    layer = SimpleRNN(4, input_shape=(3, 2), return_sequences=True)
    output = layer(x)
    
    print(output.shape)
    # (1, 3, 4)
    

    시간 분포층


    만약 우리가 텍스트의 실체를 식별하려고 한다고 가정하자.예를 들어 우리의 텍스트'나는 그롤트'에서 우리는'그롤트'를 하나의 이름으로 식별하기를 희망한다.

    우리는 이미 이전 절에서 문장의 모든 단어의 출력을 어떻게 얻는지 보았다.현재 우리는 모든 단어의 RNN 단원의 출력 벡터를 분류하는 방법이 필요하다.텍스트 분류와 같은 간단한 상황에 대해 당신은 우리가 Dense() 층과 softmax 활성화를 마지막 층으로 어떻게 사용하는지 알고 있습니다.
    이와 유사하게 TimeDistributed()라는 패키지 레이어를 통해 RNN 레이어의 여러 출력에 조밀한 () 레이어를 적용할 수 있습니다.그것은 모든 출력에 밀집층을 응용하고 실체의 클래스 확률 점수를 제공할 것이다.
    model = Sequential()
    model.add(SimpleRNN(4, input_shape=(3, 2), 
                        return_sequences=True))
    model.add(TimeDistributed(Dense(4, activation='softmax')))
    

    그림에서 보듯이 우리는 세 단어의 문장을 선택하고 밀집층을 이용하여 각 단어의 RNN 출력을 4가지 종류로 나눈다.이런 종류는 명칭, 인원, 위치 등 실체일 수 있다.

    스태킹 레이어


    우리는 또한 KERA에서 하나하나 여러 개의 귀속층을 쌓을 수 있다.
    model = Sequential()
    model.add(SimpleRNN(4, input_shape=(3, 2), return_sequences=True))
    model.add(SimpleRNN(4))
    
    다음 그림을 통해 코드의 동작을 알 수 있습니다.

    통찰: 왜 우리는 보통 최종 층을 제외한 모든 층의 return\u 서열을 True로 설정합니까?


    2층은 1층에서 입력해야 하기 때문에, 첫 번째 SimpleRN 층에 return\u sequence=True를 설정합니다.두 번째 레이어의 경우 텍스트 분류만 수행하면 False로 설정됩니다.만약 아웃 작업이 NER 예측이라면, 우리는 마지막 층에서 그것을 True로 설정할 수 있다.

    공구서류

  • Recurrent Layers - Keras Documentation
  • 연결


    만약 당신이 이 박문을 좋아한다면, 언제든지 저에게 연락 주십시오. 저는 매주 그곳에서 새로운 박문을 공유할 것입니다.

    좋은 웹페이지 즐겨찾기