python - 损失,准确性,val_loss 没有改变
问题描述
我创建了一个 CNN 模型来对狗和猫进行分类。我还使用 keras Tuner 来搜索最佳超参数。但是当我尝试搜索我的最佳参数时,损失、准确性、val_loss 值在 3 个时期后没有变化。有什么解决方案吗?
我在下面分享了我的部分代码,
IMAGE_WIDTH=128
IMAGE_HEIGHT=128
IMAGE_SIZE=(IMAGE_WIDTH, IMAGE_HEIGHT)
IMAGE_CHANNELS=3
train_df, validate_df=train_test_split(df,test_size=0.2,random_state=42)
train_df.reset_index(drop=True)
validate_df=validate_df.reset_index(drop=True)
datagen=ImageDataGenerator(rotation_range=90,
width_shift_range=0.1,
height_shift_range=0.1,
brightness_range=(1,1),
horizontal_flip=True,
vertical_flip=True,
shear_range=0.1,
rescale=1./255,
fill_mode='nearest'
)
train_gen=datagen.flow_from_dataframe(train_df,
'/kaggle/working/train',
x_col='filenames',
y_col='category',
target_size=IMAGE_SIZE,
class_mode='categorical',
batch_size=15
)
validation_datagen = ImageDataGenerator(rescale=1./255)
validation_gen = validation_datagen.flow_from_dataframe(
validate_df,
"/kaggle/working/train/",
x_col='filenames',
y_col='category',
target_size=IMAGE_SIZE,
class_mode='categorical',
batch_size=15
)
def optm(hp):
#with tpu_strategy.scope():
#here
model = keras.Sequential([
keras.layers.Conv2D(
filters=hp.Int('conv_1_filter', min_value=32, max_value=128, step=16),
kernel_size=hp.Choice('conv_1_kernel', values = (3,5)),
activation='relu',
input_shape=(IMAGE_WIDTH,IMAGE_HEIGHT,IMAGE_CHANNELS)
),
keras.layers.BatchNormalization(),
keras.layers.MaxPooling2D(pool_size=(3,3)),
keras.layers.Dropout(0.25),
keras.layers.Conv2D(
filters=hp.Int('conv_2_filter', min_value=32, max_value=64, step=16),
kernel_size=hp.Choice('conv_2_kernel', values = (3,5)),
activation='relu'
),
keras.layers.BatchNormalization(),
keras.layers.MaxPooling2D(pool_size=(3,3)),
keras.layers.Dropout(0.2),
keras.layers.Flatten(),
keras.layers.Dense(
units=hp.Int('dense_1_units', min_value=32, max_value=128, step=16),
activation='relu'
),
keras.layers.Dense(2, activation='sigmoid')
])
model.compile(optimizer=keras.optimizers.Adam(hp.Choice('learning_rate', values=[1e-2, 1e-3])),
loss='categorical_crossentropy',
metrics=['accuracy'])
return model
best_param=RandomSearch(optm,objective='val_accuracy',max_trials=5)
best_param.search(train_gen,validation_data=validation_gen,epochs=10)
运行此代码超参数调整后得到如下输出,
搜索:运行试验#1
超参数 |值 |迄今为止的最佳值 conv_1_filter |112 |?
conv_1_kernel |3 |?
conv_2_filter |48 |?
conv_2_kernel |5 |?
密集_1_units |80 |?
学习率 |0.01 |?
纪元 1/10 1334/1334 [===============================] - 140s 105ms/步 - 损失:0.7605 - 准确度: 0.4975 - val_loss: 0.6931 - val_accuracy: 0.5094 Epoch 2/10 1334/1334 [=============================] - 140 秒 105 毫秒/步 - 损失:0.6931 - 准确度:0.4976 - val_loss:0.6931 - val_accuracy:0.5094 纪元 3/10 1334/1334 [===================== ========] - 140s 105ms/步 - 损失:0.6931 - 准确度:0.4976 - val_loss:0.6931 - val_accuracy:0.5094 Epoch 4/10 1334/1334 [============ ==================] - 139s 104ms/步 - 损失:0.6931 - 准确度:0.4976 - val_loss:0.6931 - val_accuracy:0.5094 Epoch 5/10 1334/1334 [== ============================] - 139 秒 104 毫秒/步 - 损失:0.6931 - 准确度:0.4976 - val_loss:0.6931 - val_accuracy:0.5094纪元 6/10 1334/1334 [===============================] - 139 秒 104 毫秒/步 - 损失:0.6931 - 准确度:0.4976 - val_loss:0。6931 - val_accuracy: 0.5094 Epoch 7/10 1334/1334 [==============================] - 139s 104ms/step -损失:0.6931 - 准确度:0.4976 - val_loss:0.6931 - val_accuracy:0.5094 Epoch 8/10 1334/1334 [========================== ===] - 140 秒 105 毫秒/步 - 损失:0.6931 - 准确度:0.4976 - val_loss:0.6931 - val_accuracy:0.5094
解决方案
推荐阅读
- android - 无法将 android 客户端连接到 Laravel Web 套接字(Web 套接字的代码之外)
- java - 如何在标题栏的中心设置应用程序的标题?
- prometheus - Prometheus-am-executor 中的 executor.yml 文件问题
- flutter - 将颤动下拉菜单更改为 textalign left
- ipv6 - 在 eBPF 中将 IPv4 转换为 IPv6 时,“bpf_l4_csum_replace”的校验和计算问题
- mongodb - Mongo 4.2 错误输出阶段需要一个字符串参数,但找到了对象
- javascript - 为字符串添加右填充,使其以一致的行/列结构显示
- paypal - Paypal 沙箱 INVALID_RESOURCE_ID RESOURCE_NOT_FOUND
- flutter - 如何在 Flutter 的 Choice Chip 中不选择索引的情况下打印值
- javascript - 满载后使用javascript读取网页