.IMDB, THUCNews 데이터 세트 다운로드 및 탐색

4106 단어 DataWhale
IMDB 참조Tensorflow 홈페이지 코드
모델은 다음과 같다.
vocab_size = 10000

model = keras.Sequential()
model.add(keras.layers.Embedding(vocab_size, 16))
model.add(keras.layers.GlobalAveragePooling1D())
model.add(keras.layers.Dense(16, activation=tf.nn.relu))
model.add(keras.layers.Dense(1, activation=tf.nn.sigmoid))

model.summary()
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
embedding (Embedding)        (None, None, 16)          160000
_________________________________________________________________
global_average_pooling1d (Gl (None, 16)                0
_________________________________________________________________
dense (Dense)                (None, 16)                272
_________________________________________________________________
dense_1 (Dense)              (None, 1)                 17
=================================================================
Total params: 160,289
Trainable params: 160,289
Non-trainable params: 0
_________________________________________________________________

레이어를 순서대로 계층화하여 분류기를 구성합니다.
  • 1층은 엠베딩층이다.이 층은 정수 인코딩된 어휘표에서 단어 - 인덱스의 삽입 벡터를 찾을 것입니다.모형은 훈련을 받을 때 이런 벡터를 배운다.이 벡터들은 출력 그룹에 차원을 추가합니다.생성된 차원은 다음과 같습니다. (batch, sequence,embedding)
  • 다음에 Global Average Pooling 1D층은 시퀀스 차원에서 평균치를 구하고 각 견본에 대해 길이가 고정된 출력 벡터를 되돌려준다.이렇게 하면 모델은 가능한 한 간단한 방식으로 각종 길이의 입력을 처리할 수 있다.
  • 이 길이의 고정된 출력 벡터는 전체 연결(Dense) 층(16개의 숨겨진 단원 포함)으로 전송됩니다.
  • 마지막 층은 단일 출력 노드와 밀집되어 있다.sigmoid를 사용하여 함수를 활성화하면 결과는 0에서 1 사이의 부동점 값으로 확률이나 신뢰 수준을 나타낸다.

  • 프로세스 = 1. 데이터 집합을 다운로드하고 데이터 집합 형식, 라벨 형식을 보며 어휘표를 작성하고 [""], [""][""] 2를 추가하고word 를 구축한다.id 및 id단어가 삽입되고 문장마다 숫자 3으로 번역됩니다. 어떤 모델로 예측할지 생각해 봅시다.Tensorflow는 Global Average Pooling 1D 강하 비트를 사용하고 두 개의 전체 연결 마지막 비트는 1입니다. 라벨 비트와 대응 4, 최적화기 구축model.compile(optimizer=tf.train.AdamOptimizer(), loss='binary_crossentropy', metrics=['accuracy']) 5. 훈련 모델
    history = model.fit(partial_x_train,
                        partial_y_train,
                        epochs=40,
                        batch_size=512,
                        validation_data=(x_val, y_val),
                        verbose=1)
    

    THUCNews 관련 코드https://github.com/gaussic/text-classification-cnn-rnnText Classification with CNN 처리 데이터 세트 readfile (): 파일 데이터 읽기;build_vocab(): 어휘표를 구축하고 문자급의 표시를 사용하면 이 함수는 어휘표를 저장하여 매번 중복 처리를 피한다.read_vocab(): 이전에 저장된 어휘표를 읽고 {어:id} 표시로 변환하기;read_category (): 분류 디렉터리를 고정시키고 {클래스: id} 표시로 변환합니다.to_words(): id로 표시된 데이터를 문자로 다시 변환하기;process_파일 (): 데이터 집합을 문자에서 고정 길이의 id 시퀀스로 변환하기;batch_iter (): 신경 네트워크의 훈련을 위해 shuffle의 횟수를 거친 데이터를 준비합니다.
    CNN 모형
       
     embedding = tf.get_variable('embedding', [self.config.vocab_size, self.config.embedding_dim])
     embedding_inputs = tf.nn.embedding_lookup(embedding, self.input_x)
    

    권적지화
    conv = tf.layers.conv1d(embedding_inputs, self.config.num_filters, self.config.kernel_size, name='conv')
     # global max pooling layer
      gmp = tf.reduce_max(conv, reduction_indices=[1], name='gmp')
    

    모든 연결을 통해 예측치의 최대 인덱스를 찾아낸다
    fc = tf.layers.dense(gmp, self.config.hidden_dim, name='fc1')
    fc = tf.contrib.layers.dropout(fc, self.keep_prob)
    fc = tf.nn.relu(fc)
    
    #    
     self.logits = tf.layers.dense(fc, self.config.num_classes, name='fc2')
     self.y_pred_cls = tf.argmax(tf.nn.softmax(self.logits), 1)  #     
    
    

    최적화기 구축
    #     ,   
     cross_entropy = tf.nn.softmax_cross_entropy_with_logits(logits=self.logits, labels=self.input_y)
      self.loss = tf.reduce_mean(cross_entropy)
      #    
      self.optim = tf.train.AdamOptimizer(learning_rate=self.config.learning_rate).minimize(self.loss)
    
    

    요약은 상기 두 가지 모델을 통해 알 수 있듯이 문자 처리 임무 절차는 다음과 같다. 1. 데이터 집합을 처리하고 어휘표를 구축하며 어휘와 숫자의 映射表를 구축한다. 2. 어휘를 삽입하여 문장을 숫자로 전환시킨다. 3. 어떤 모델을 사용해야 할지 생각하고 경과를 숫자로 전환한 문장을 모델에 넣는다. 4. 최적화기 구축5. 훈련

    좋은 웹페이지 즐겨찾기