해결됨
예제로 배우는 딥러닝 자연어 처리 입문 NLP with TensorFlow - RNN부터 BERT까지
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로 바꿔주면 되나요?