Насколько большой размер партии и количество эпох при установке модели в Keras?
Я тренируюсь по 970 образцам и проверяю 243 образца.
Насколько велика должна быть размер партии и количество эпох при установке модели в Keras для оптимизации val_acc? Существует ли какое-либо эмпирическое правило для использования на основе размера ввода данных?
Ответы
Ответ 1
Поскольку у вас довольно небольшой набор данных (~ 1000 образцов), вы, вероятно, будете в безопасности, используя размер партии 32, что довольно стандартно. Это не будет иметь большого значения для вашей проблемы, если вы не тренируетесь сотнями тысяч или миллионов наблюдений.
Чтобы ответить на ваши вопросы по размеру партии и эпохам:
В целом: большие размеры партии приводят к более быстрому прогрессу в обучении, но не всегда сходятся так же быстро. Меньшие размеры партии растут медленнее, но могут сходиться быстрее. Это определенно зависит от проблемы.
В целом, модели улучшаются с более эпохами обучения, до определенной степени. Они начнут плато в точности по мере их сближения. Попробуйте что-то вроде 50 и нарисуйте число эпох (ось x) против точности (ось y). Вы увидите, где он выравнивается.
Каков тип и/или форма данных? Являются ли эти изображения или просто табличными данными? Это важная деталь.
Ответ 2
Отличные ответы выше. Все дали хорошие результаты.
В идеале, это последовательность размеров партии, которая должна использоваться:
{1, 2, 4, 8, 16} - slow
{ [32, 64],[ 128, 256] }- Good starters
[32, 64] - CPU
[128, 256] - GPU for more boost
Ответ 3
Я использую Keras для выполнения нелинейной регрессии по речевым данным. Каждый из моих речевых файлов дает мне функции, которые составляют 25000 строк в текстовом файле, причем каждая строка содержит 257 реальных значений. Я использую размер партии 100, эпоху 50 для обучения Sequential
модели в Keras с 1 скрытым слоем. После 50 эпох обучения он сходится довольно хорошо до низкого значения val_loss
.
Ответ 4
Я использовал Keras для выполнения нелинейной регрессии для моделирования рынка. Я получил лучшие результаты с размером партии 32 и epochs = 100 во время обучения Sequential модели в Keras с 3 скрытыми слоями. Обычно размер партии 32 или 25 хорош, с эпохами = 100, если у вас нет большого набора данных. в случае большого набора данных вы можете пойти с размером партии 10 с эпохами b/w от 50 до 100. Снова вышеупомянутые цифры отлично справились со мной.
Ответ 5
У меня есть около 40000 точек данных. Я обнаружил, что использование большего размера партии позволило сократить время, необходимое для обучения модели. Я использую размер партии на 10000... есть ли недостаток в использовании очень большого размера партии? (Я использую керас)
Ответ 6
Время зависит от вашего желания, в зависимости от того, когда потеря проверки перестает улучшаться дальше. Это должно быть размером партии:
# определить функцию, чтобы найти размер партии для обучения модели
ИСПОЛЬЗУЙТЕ ЭТУ ФУНКЦИЮ, ЧТОБЫ НАЙТИ РАЗМЕР ПАРТИИ, ТОЛЬКО ТОЛЬКО ПЕРЕД НАЧАЛОМ ВАШЕГО ОБУЧЕНИЯ/ИСПЫТАНИЯ.
def FindBatchSize(model):
"""#model: model architecture, that is yet to be trained"""
import os, sys, psutil, gc, tensorflow, keras
import numpy as np
from keras import backend as K
BatchFound= 16
try:
total_params= int(model.count_params()); GCPU= "CPU"
#find whether gpu is available
try:
if K.tensorflow_backend._get_available_gpus()== []:
GCPU= "CPU"; #CPU and Cuda9GPU
else:
GCPU= "GPU"
except:
from tensorflow.python.client import device_lib; #Cuda8GPU
def get_available_gpus():
local_device_protos= device_lib.list_local_devices()
return [x.name for x in local_device_protos if x.device_type == 'GPU']
if "gpu" not in str(get_available_gpus()).lower():
GCPU= "CPU"
else:
GCPU= "GPU"
#decide batch size on the basis of GPU availability and model complexity
if (GCPU== "GPU") and (os.cpu_count() >15) and (total_params <1000000):
BatchFound= 64
if (os.cpu_count() <16) and (total_params <500000):
BatchFound= 64
if (GCPU== "GPU") and (os.cpu_count() >15) and (total_params <2000000) and (total_params >=1000000):
BatchFound= 32
if (GCPU== "GPU") and (os.cpu_count() >15) and (total_params >=2000000) and (total_params <10000000):
BatchFound= 16
if (GCPU== "GPU") and (os.cpu_count() >15) and (total_params >=10000000):
BatchFound= 8
if (os.cpu_count() <16) and (total_params >5000000):
BatchFound= 8
if total_params >100000000:
BatchFound= 1
except:
pass
try:
#find percentage of memory used
memoryused= psutil.virtual_memory()
memoryused= float(str(memoryused).replace(" ", "").split("percent=")[1].split(",")[0])
if memoryused >75.0:
BatchFound= 8
if memoryused >85.0:
BatchFound= 4
if memoryused >90.0:
BatchFound= 2
if total_params >100000000:
BatchFound= 1
print("Batch Size: "+ str(BatchFound)); gc.collect()
except:
pass
memoryused= []; total_params= []; GCPU= "";
del memoryused, total_params, GCPU; gc.collect()
return BatchFound
#####################################################################################################
#####################################################################################################