二进制和多classclassification代码更改
Binary and multi-class classification code change
我使用的代码与我在此处找到的几乎相似...
https://towardsdatascience.com/classify-butterfly-images-with-deep-learning-in-keras-b3101fe0f98
该示例与二进制class化有关。我正在测试的数据要求 multi-class classification。我想我需要更改激活和损失函数。如果我有 2 种以上类型,我可以使用此处找到的相同代码吗?
https://github.com/bertcarremans/Vlindervinder/blob/master/model/CNN.ipynb
更新:
我还有一个问题。如果我有足够的数据,是否有必要进行扩充?
只要把binary_crossentropy
改成categorical_crossentropy
:
cnn.compile(loss='categorical_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
如果您的标签不是单热编码修改这些行:
train_generator = train_datagen.flow_from_directory(
'data/train',
target_size=(IMG_SIZE,IMG_SIZE),
batch_size = BATCH_SIZE,
class_mode='categorical')
validation_generator = validation_datagen.flow_from_directory(
'data/validation',
target_size=(IMG_SIZE,IMG_SIZE),
batch_size = BATCH_SIZE,
class_mode='categorical')
不是,那是多标签class化。你说的多class。这里有一个总结:
- Binary: 你有 single 0 或 1 的输出。你在最后一层使用类似
Dense(1, activation='sigmoid')
的东西,并且binary_cross_entropy
作为损失函数。
- 多标签:你有多个输出0或1;
Dense(num_labels, activation='sigmoid')
又 binary_cross_entropy
。在这种情况下,一个示例可以同时属于多个标签。
- Multi-class:例子属于1 out of N classes,他们互为独家的。您将
Dense(num_classes, activation='softmax')
与 softmax_crossentropy
一起使用。
我使用的代码与我在此处找到的几乎相似...
https://towardsdatascience.com/classify-butterfly-images-with-deep-learning-in-keras-b3101fe0f98
该示例与二进制class化有关。我正在测试的数据要求 multi-class classification。我想我需要更改激活和损失函数。如果我有 2 种以上类型,我可以使用此处找到的相同代码吗?
https://github.com/bertcarremans/Vlindervinder/blob/master/model/CNN.ipynb
更新: 我还有一个问题。如果我有足够的数据,是否有必要进行扩充?
只要把binary_crossentropy
改成categorical_crossentropy
:
cnn.compile(loss='categorical_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
如果您的标签不是单热编码修改这些行:
train_generator = train_datagen.flow_from_directory(
'data/train',
target_size=(IMG_SIZE,IMG_SIZE),
batch_size = BATCH_SIZE,
class_mode='categorical')
validation_generator = validation_datagen.flow_from_directory(
'data/validation',
target_size=(IMG_SIZE,IMG_SIZE),
batch_size = BATCH_SIZE,
class_mode='categorical')
不是,那是多标签class化。你说的多class。这里有一个总结:
- Binary: 你有 single 0 或 1 的输出。你在最后一层使用类似
Dense(1, activation='sigmoid')
的东西,并且binary_cross_entropy
作为损失函数。 - 多标签:你有多个输出0或1;
Dense(num_labels, activation='sigmoid')
又binary_cross_entropy
。在这种情况下,一个示例可以同时属于多个标签。 - Multi-class:例子属于1 out of N classes,他们互为独家的。您将
Dense(num_classes, activation='softmax')
与softmax_crossentropy
一起使用。