为什么训练Unet网络的时候使用fit_generator训练时loss根本不下降,但是用fit时loss却会下降

博主在使用fit_generator进行模型训练时遇到loss不下降的问题,在调整为使用fit方法后,发现loss能够正常下降。本文记录了这一现象并计划后续深入探究其原因。

如题,这是目前博主遇到的一个问题,

参数如下

loss不会下降

model.fit_generator(myGene,steps_per_epoch=500,epochs=100,callbacks=[model_checkpoint],shuffle=True)

 

loss会下降

hist=model.fit(imgs_train, labs_train, batch_size=Bch_Sz, nb_epoch=100, initial_epoch=0,  validation_split=0.2, verbose=1, shuffle= True,callbacks=[model_checkpoint])

 

先挖个坑,等以后发现了问题的原因后再来填坑

UNet是一种经典的用于图像分割的深度学习模型,它特别适合于处理像医学影像这样的高分辨率数据。以下是使用Keras库在Python中训练UNet的基本步骤: 1. **安装必要的库**:确保你已经安装了Keras(可以选择基于Tensorflow或PyTorch的版本),以及数据增强库(如`ImageDataGenerator`)。 2. **数据准备**:准备标注好的训练和验证图片数据集。这些数据应包含一对图像和相应的分割掩码。可以使用`ImageDataGenerator`来进行数据增强,增加模型的泛化能力。 3. **构建模型**: - 导入所需模块: ```python from keras.models import Model from keras.layers import Input, Conv2D, MaxPooling2D, UpSampling2D, Concatenate ``` - 创建U-Net结构: ```python def unet(input_size): inputs = Input(input_size) # ... 这里包含编码层(downsampling)和解码层(upsampling) output = Conv2D(1, (1, 1), activation='sigmoid')(outputs) # 输出层,激活函数通常是sigmoid,因为目标是二值分割 return Model(inputs=inputs, outputs=output) ``` 4. **模型编译**: ```python model = unet((input_height, input_width, channels)) # 输入尺寸 model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) ``` 5. **训练模型**: - 加载数据: ```python train_generator = data_generator_train(data_dir, batch_size, input_size) val_generator = data_generator_val(data_dir, batch_size, input_size) ``` - 训练: ```python history = model.fit(train_generator, steps_per_epoch=len(train_generator), epochs=num_epochs, validation_data=val_generator, validation_steps=len(val_generator)) ``` 6. **保存模型**: 当训练完成后,你可以保存模型以便将来使用: ```python model.save('unet_model.h5') ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值