반응형
Text 의 분류 예제입니다.
keras.datasets 에서 제공하는 IMDB 리뷰셋을 이용해서 긍정(1), 부정(1)에 대한 평가에 대한 분류를 하는 내용입니다.
dataset은 각 text에 포함되는 단어가 단어사전의 index 로 치환되어 제공되고, 최대 256 개의 단어 index를 포함합니다.
train, test dataset의 각 text별 포함되는 단어 개수가 다르기 때문에 padding 작업이 필요합니다.
model 구성 시, 이미지분류 때와는 달리 Embedding layer를 입력층으로 합니다.
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
import tensorflow as tf
from tensorflow import keras
import numpy as np
# load data
imdb = keras.datasets.imdb
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)
word_index = imdb.get_word_index()
word_index = {k:(v+3) for k,v in word_index.items()}
word_index["<PAD>"] = 0
word_index["<START>"] = 1
word_index["<UNK>"] = 2
word_index["<UNUSED>"] = 3
reverse_word_index = dict([(value, key) for (key, value) in word_index.items()])
def decode_review(text):
return ' '.join([reverse_word_index.get(i) for i in text])
# preprocess
# - adjusting the length of dataset as same
train_data = keras.preprocessing.sequence.pad_sequences(train_data,
value=word_index["<PAD>"],
padding='post',
maxlen=256)
test_data = keras.preprocessing.sequence.pad_sequences(test_data,
value=word_index["<PAD>"],
padding='post',
maxlen=256)
# make model
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='relu'))
model.add(keras.layers.Dense(1, activation='sigmoid'))
model.summary()
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# make validation set
x_val = train_data[:10000]
partial_x_train = train_data[10000:]
y_val = train_labels[:10000]
partial_y_train = train_labels[10000:]
# train model
history = model.fit(partial_x_train,
partial_y_train,
epochs=40,
batch_size=512,
validation_data=(x_val, y_val),
verbose=1)
results = model.evaluate(test_data, test_labels, verbose=2)
print(results)
|
cs |
결과
단순한 전처리와 model training 만으로 loss값 0.33, accuracy가 0.87이나 나왔습니다.
반응형
'머신러닝 > Tensorflow' 카테고리의 다른 글
Tensorflow 2.0 - Text classification by TF Hub (0) | 2021.03.08 |
---|---|
Tensorflow 2.0 - Basic image classification (0) | 2021.03.06 |
Tensorflow 2.0 - Tutorial (0) | 2021.03.05 |