模型训练(超参数batch_size/epoch/batch、损失函数DiceLoss/CrossEntropy/FocalLoss、优化器SGD/Adam/Adamw、衰减策略step/cos)

模型中的超参数(batch_size、epoch、batch)

深度学习中Epoch、Batch以及Batch size的设定

epoch:

1个epoch指用训练集中的全部样本训练一次,此时相当于batch_size 等于训练集的样本数。
如果epoch=50,总样本数=10000,batch_size=20,则需要迭代500次。

iteration:

1次iteration即迭代1次,也就是用batch_size个样本训练一次。每一次迭代得到的结果都会被作为下一次迭代的初始值.

batch_size:

每批数据量的大小.用SGD的优化算法进行训练,也就是1 次iteration一起训练batch_size个样本,计算它们的平均损失函数值,来更新一次参数。

举例:

一个excel中包括200个样本(数据行)的数据,选择batch_size=5, epoch=1000,
则batch=40个,每个batch有5个样本,一次epoch将进行40个batch或40次模型参数更新,1000个epoch,模型将传递整个数据集1000次,在整个训练过程中,总共有40000次batch.

引用例子:

mnist 数据集有 60000 张训练数据,10000 张测试数据。现在选择 Batch_Size = 100 对模型进行训练。 每个
epoch 要训练的图片数量:60000(训练集上的所有图像) 训练集具有的 batch 个数: 60000/100=600 每个
epoch 需要完成的 batch 个数: 600 每个 epoch 具有的 Iteration 个数:
600(完成一个batch,相当于参数迭代一次) 每个 epoch 中发生模型权重更新的次数:600 训练 10
个epoch后,模型权重更新的次数: 600*10=6000
不同epoch的训练,其实用的是同一个训练集的数据。第1个epoch和第10个epoch虽然用的都是训练集的60000图片,但是对模型的权重更新值却是完全不同的。因为不同epoch的模型处于代价函数空间上的不同位置,模型的训练代越靠后,越接近谷底,其代价越小。
总共完成30000次迭代,相当于完成了 30000/600=50 个epoch

batch_size的选择原则:batch_size越大,batch越少,需要迭代的次数越少,训练时间越短。
batch_size越小,batch数量越多,耗时久,计算机占用内存大。

损失函数

Dice Loss
常用损失函数(二):Dice Loss

交叉熵CrossEntropy、Focal Loss
从交叉熵(CE)到Focal Loss(FL)完整解析

优化器

SGD -> SGDM -> NAG ->AdaGrad -> AdaDelta -> Adam -> Nadam -> AdamW

学习率衰减策略

学习率衰减策略StepLR、ExponentialLR、MultiStepLR和CosineAnnealingLR

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
from keras import applications from keras.preprocessing.image import ImageDataGenerator from keras import optimizers from keras.models import Sequential, Model from keras.layers import Dropout, Flatten, Dense img_width, img_height = 256, 256 batch_size = 16 epochs = 50 train_data_dir = 'C:/Users/Z-/Desktop/kaggle/train' validation_data_dir = 'C:/Users/Z-/Desktop/kaggle/test1' OUT_CATAGORIES = 1 nb_train_samples = 2000 nb_validation_samples = 100 base_model = applications.VGG16(weights='imagenet', include_top=False, input_shape=(img_width, img_height, 3)) base_model.summary() for layer in base_model.layers[:15]: layer.trainable = False top_model = Sequential() top_model.add(Flatten(input_shape=base_model.output_shape[1:])) top_model.add(Dense(256, activation='relu')) top_model.add(Dropout(0.5)) top_model.add(Dense(OUT_CATAGORIES, activation='sigmoid')) model = Model(inputs=base_model.input, outputs=top_model(base_model.output)) model.compile(loss='binary_crossentropy', optimizer=optimizers.SGD(learning_rate=0.0001, momentum=0.9), metrics=['accuracy']) train_datagen = ImageDataGenerator(rescale=1. / 255, horizontal_flip=True) test_datagen = ImageDataGenerator(rescale=1. / 255) train_generator = train_datagen.flow_from_directory( train_data_dir, target_size=(img_height, img_width), batch_size=batch_size, class_mode='binary') validation_generator = test_datagen.flow_from_directory( validation_data_dir, target_size=(img_height, img_width), batch_size=batch_size, class_mode='binary', shuffle=False ) model.fit_generator( train_generator, steps_per_epoch=nb_train_samples / batch_size, epochs=epochs, validation_data=validation_generator, validation_steps=nb_validation_samples / batch_size, verbose=2, workers=12 ) score = model.evaluate_generator(validation_generator, nb_validation_samples / batch_size) scores = model.predict_generator(validation_generator, nb_validation_samples / batch_size)看看这段代码有什么错误
06-02

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值