Я пытаюсь классифицировать текст по основному положению, положительному или отрицательному, с помощью Кераса. Однако, хотя код работает, я не совсем понимаю две вещи.
1.Как работает слой Dense с функцией Sigmoid, чтобы классифицировать текст, учитывая, что из того, что я понял, " sigmoid "функция возвращает число от 0 до 1? Считает ли Keras по умолчанию 0 отрицательных и 1 положительных?
2. При использовании binary_crossentropy, какую разницу мы точно вычисляем? Я знаю, что разница между основной истиной и нашим предсказанием. Но какой именно?
Это мой код:
train_validation_split = tfds.Split.TRAIN.subsplit([6, 4])
(train_data, validation_data), test_data = tfds.load(
name="imdb_reviews",
split=(train_validation_split, tfds.Split.TEST),
as_supervised=True)
train_examples_batch, train_labels_batch = next(iter(train_data.batch(7)))
print(train_examples_batch)
print(train_labels_batch)
embedding = "https://tfhub.dev/google/tf2-preview/gnews-swivel-20dim/1"
hub_layer = hub.KerasLayer(embedding, input_shape=[],
dtype=tf.string, trainable=True)
model = tf.keras.Sequential()
model.add(hub_layer)
model.add(tf.keras.layers.Dense(20, activation='relu'))
model.add(tf.keras.layers.Dense(1, activation='sigmoid'))
model.summary()
model.compile(optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy'])
model.fit(train_data.shuffle(10000).batch(512),
epochs=25,
validation_data=validation_data.batch(512),
verbose=1)
results = model.evaluate(test_data.batch(512), verbose=2)
for name, value in zip(model.metrics_names, results):
print("%s: %.3f" % (name, value))
Большое вам спасибо!