BERT를 이용한 텍스트 분류에서 다중분류라면 어떻게 해야할까요?
보여주신 두 개의 예가 모두 이진 분류 문제라서 질문드려 봅니다.
AUTOTUNE = tf.data.AUTOTUNE
batch_size = 32
class_names = ['neg', 'pos']
# train 데이터셋 준비
df_train_target = df_train.pop('labels')
train_dataset = tf.data.Dataset.from_tensor_slices((df_train.values, df_train_target.values))
raw_train_ds = train_dataset.shuffle(len(df_train)).batch(batch_size)
train_ds = raw_train_ds.cache().prefetch(buffer_size=AUTOTUNE)
# validation 데이터셋 준비
df_valid_target = df_valid.pop('labels')
valid_dataset = tf.data.Dataset.from_tensor_slices((df_valid.values, df_valid_target.values))
valid_ds = valid_dataset.shuffle(len(df_valid)).batch(batch_size)
valid_ds = valid_ds.cache().prefetch(buffer_size=AUTOTUNE)
# test 데이터셋
df_test_target = df_test.pop('labels')
test_dataset = tf.data.Dataset.from_tensor_slices((df_test.values, df_test_target.values))
test_ds = test_dataset.shuffle(len(df_test)).batch(batch_size)
test_ds = test_ds.cache().prefetch(buffer_size=AUTOTUNE)여기서 class_names를 class수 에 맞게 변경하고
net = tf.keras.layers.Dense(1, activation=None, name='classifier')(net)Fine Tuning시 Dense Layer를 class수에 맞게 변경 하고...
< 여기서 activation은 이진 분류 문제임에도 sigmoid가 아니라 None인데, 그럴경우 linear로 되는 것으로 알고있습니다. 다중분류 문제 분류를 할 때도 None으로 설정하면 될까요? >
def print_my_examples(inputs, results):
result_for_printing = \
[f'input: {inputs[i]:<30} : score: {results[i][0]:.6f}'
for i in range(len(inputs))]
print(*result_for_printing, sep='\n')
print()
examples = [
'this is such an amazing movie!', # this is the same sentence tried earlier
'The movie was great!',
'The movie was meh.',
'The movie was okish.',
'The movie was terrible...'
]
reloaded_results = tf.sigmoid(reloaded_model(tf.constant(examples)))
original_results = tf.sigmoid(classifier_model(tf.constant(examples)))
print('Results from the saved model:')
print_my_examples(examples, reloaded_results)
print('Results from the model in memory:')
print_my_examples(examples, original_results)마지막으로 다중분류를 할 때,
reloaded_results = tf.sigmoid(reloaded_model(tf.constant(examples)))
original_results = tf.sigmoid(classifier_model(tf.constant(examples)))여기서 tf.softmax로 바꿔주면 되나요?
回答 1
0
안녕하세요~. 반갑습니다.
다중 분류로 진행하시려면
여기서 class_names를 class수 에 맞게 변경하고
Fine Tuning시 Dense Layer를 class수에 맞게 변경 하고...
Loss Function을 BinaryCrossentropy 대신 CategoricalCrossentropy나 SparseCategoricalCrossentropy로 바꿔주시고 (데이터를 어떻게 구성하느냐에 따라 둘중에 어떤 Loss를 사용하는지가 달라집니다.)
학습한뒤에 prediction 결과에서 argmax로 확률값이 가장 높은 요소를 뽑아주시면 됩니다.
말씀해주신 부분들에서 LossFunction을 변경하는 것만 추가해서 고려해주시면 될것 같습니다.
좋은 하루되세요~.
감사합니다.
import torch가 안되는 경우는 어떻게 하나요?
0
16
1
소리가 겹쳐서 들려요
0
20
2
가중치에 대한 질문
0
107
1
transformer 기계번역 강의 오류 질문
0
155
2
seq2seq를_이용한_NMT.ipynb 실습코드 에러 문의사항입니다.
0
254
2
실습 2 - Char-RNN 코드 학습 부분에서 오류가 발생합니다.
0
277
2
pad_both_ends 사용할 때 n은 왜 사용하나요?
1
206
2
트레이닝 에러 발생
0
335
2
트랜스포머 인코더 레이어 테스트 에러
0
219
1
9강 BERT 실습 예제 코드
0
465
1
Bert 관련 문의
0
336
2
코랩에서 실행이 안됩니다
0
1126
1
bert를 이용해서 ocr 시스템을 만들려면 어떻게 해야 할까요 ?
0
787
1
소스코드 실행 시 에러
0
565
2
N-gram_example
1
808
1
개인 깃허브 소스코드 업로드 가능할까요?
0
331
1
#@title Choose a BERT model to fine-tune
0
370
1
nltk모듈 MLE의 score메서드 계산 질문드립니다.
0
202
0
bert 파인튜닝 코드 질문
0
397
0
네이버 영화리뷰 파인튜닝 질문드려요
0
306
1
코드 실행 오류
0
316
1
bert를 이용한 텍스트 분류 imdb 편 질문드립니다.
0
355
1
안녕하세요. 강의 잘듣고있습니다!
0
278
1
강의 자료는 어디있나요(자연어 처리)
0
333
1

