首页 > 解决方案 > Keras 如何处理 sigmoid 函数和概率

问题描述

我正在尝试通过 Keras 的主要情绪(正面或负面)对文本进行分类。但是,即使代码有效,我也不完全理解两件事。

1.Sigmoid函数的Dense层如何工作以分类文本,考虑到据我了解,“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))

太感谢了!

标签: pythonkerasclassification

解决方案


推荐阅读