.IMDB, THUCNews 데이터 세트 다운로드 및 탐색
4106 단어 DataWhale
모델은 다음과 같다.
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. 데이터 집합을 다운로드하고 데이터 집합 형식, 라벨 형식을 보며 어휘표를 작성하고 [""], [""][""] 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. 훈련