【发布时间】:2020-09-07 17:44:10
【问题描述】:
我正在使用迁移学习并在“inception_v3”模型的基础上进行构建。训练似乎很顺利,我的 val_accuracy 为 0.9526。我也可以在获得新样本的预测标签之后执行 predict_class - 这似乎也很好。 但是,由于某种原因,当我尝试使用 predict 函数时,它总是在 0 到 3.31e-11 的范围内输出非常低的概率。我认为它应该输出0到1范围内的概率? 也许我做错了什么?这是一个 2 类问题,这就是我正在做的事情:
import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.callbacks import ModelCheckpoint, ReduceLROnPlateau, EarlyStopping
from tensorflow.keras.optimizers import Adam
from tensorflow.keras import regularizers
image_size = (128,128)
batch_size = 32
train_ds = tf.keras.preprocessing.image_dataset_from_directory(
data_dir,
validation_split=0.2,
subset="training",
label_mode = 'binary',
seed = 1337,
image_size=image_size,
batch_size=batch_size,
)
val_ds = tf.keras.preprocessing.image_dataset_from_directory(
data_dir,
validation_split=0.2,
subset="validation",
label_mode = 'binary',
seed = 1337,
image_size=image_size,
batch_size=batch_size,
)
global_average_layer = tf.keras.layers.GlobalAveragePooling2D()
Dl_1 = tf.keras.layers.Dropout(rate = 0.2)
prediction_layer = tf.keras.layers.Dense(1,activation='sigmoid') # 120, softmax
#Add dropout Layer
model_V3 = tf.keras.Sequential([
pre_trained_model,
global_average_layer,
Dl_1,
prediction_layer
])
model_V3.compile(optimizer='adam',
loss='binary_crossentropy',#sparse_categorical_crossentropy
metrics=['accuracy'])
model_V3.summary()
# Callbacks
lr_reduce = ReduceLROnPlateau(monitor='val_loss', factor=0.2, patience=3, verbose=2, mode='max')
early_stop = EarlyStopping(monitor='val_loss', min_delta=0.1, patience=1, mode='min')
hist = model_V3.fit(
augmented_train_ds.repeat(), steps_per_epoch=int(8000/batch_size),
epochs=10, validation_data=augmented_val_ds.repeat(),
validation_steps=int(2000/batch_size) , callbacks=[lr_reduce])
Ypred = model_V3.predict(val_ds) # <--- This always returns very low probabilities. Why?
【问题讨论】:
-
训练的结果如何?
-
纪元 10/10 250/250 [=============================] - 预计到达时间: 0s - 损失:0.1333 - 准确度:0.9537 Epoch 00010:ReduceLROnPlateau 将学习率降低到 8.000000525498762e-06。 250/250 [==============================] - 20s 80ms/步 - 损失:0.1333 - 准确度:0.9537 - val_loss :0.1389 - val_accuracy:0.9506
-
准确度看起来还可以。你得到了什么准确的预测?
-
我希望在区间 [0,1] 而不是区间 [0,3.31e-11] 中的概率
-
你的数据集平衡了吗?我的意思是0类的样本数几乎等于1类的样本数?
标签: python tensorflow machine-learning keras computer-vision