Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Opmerking: Voor BrainScript-gebruikers is minibatchSizede parameter voor minibatchgrootte , voor Python gebruikers, het is minibatch_size_in_samples. Zie hier voor Python gebruikers.
CNTK heeft een zeer specifieke definitie van minibatchSize de parameter: het geeft het aantal voorbeelden aan tussen modelupdates.
Hier wordt een voorbeeld gedefinieerd als één vector of tensor die door het systeem stroomt.
In een afbeeldingsherkenningstaak is één afbeelding bijvoorbeeld één voorbeeld.
De minibatchgrootte voor elk tijdvak, gegeven in steekproeven (tensors langs een dynamische as). De standaardwaarde is 256. U kunt verschillende waarden gebruiken voor verschillende tijdvakken, bijvoorbeeld 128*2:1024 (in BrainScript) of 128*2 + 1024 (in Python) betekent het gebruik van minibatchgrootte van 128 voor de eerste twee epochs en vervolgens 1024 voor de rest.
Houd er rekening mee dat 'Minibatchgrootte' in CNTK betekent dat het aantal monsters dat wordt verwerkt tussen modelupdates. Deze definitie geldt ook voor het parallelliseren van werknemers (bijvoorbeeld voor K werknemers, het aantal steekproeven dat elke werknemer zou verwerken minibatchSize/K).
In het geval van invoer minibatchSize van variabele lengte verwijst dit naar het aantal items in deze reeksen, niet het aantal reeksen.
SGD probeert zo veel mogelijk reeksen in de minibatch te passen die het totale aantal steekproeven niet overschrijdt minibatchSize .
Als er verschillende invoerwaarden worden opgegeven, worden tensors toegevoegd aan de huidige minibatch totdat een van de invoerwaarden de minibatchSize overschrijdt.
Belangrijk is dat voor sequentiële gegevens een voorbeeld een afzonderlijk item van een reeks is.
Daarom verwijst CNTK nietminibatchSize naar het aantal reeksen in de minibatch, maar het geaggregeerde aantal reeksitems/tokens in de reeksen die de minibatch vormen.
CNTK beschikt over systeemeigen ondersteuning voor reeksen met variabele lengte, dat wil weten dat het geschikt is voor reeksen met zeer uiteenlopende lengten binnen dezelfde minibatch, zonder dat er tijdelijke oplossingen nodig zijn, zoals bucketing.
Samen met CNTK's idee van het opgeven van de leersnelheid per steekproef (in plaats van een minibatch gemiddelde), draagt elk item van elke lengte hetzelfde bij aan de kleurovergang, wat leidt tot consistente convergentie.
(Veel andere toolkits definiëren de minibatchgrootte voor sequentiële gegevens als het aantal reeksen in de minibatch. Dit is problematisch, vooral als kleurovergangen ook worden gedefinieerd als minibatchgemiddelden in plaats van de minibatchsom van CNTK, omdat de bijdrage aan de kleurovergang van elk token of elke stap in een reeks omgekeerd evenredig is met de reekslengte. CNTK aanpak vermijdt dit.)
Wanneer meerdere Input{}s worden gebruikt, is het mogelijk dat niet alle invoer dezelfde reekslengte heeft.
In de volgordeclassificatie is het label van elke reeks bijvoorbeeld één token.
In dit geval bepaalt de invoer met het grootste aantal steekproeven de minibatchgrootte. (U kunt dit gedrag wijzigen door op te definesMbSize=True geven voor bepaalde invoer, waarna de minibatchgrootte wordt geteld op basis van de reeksen van deze specifieke invoer. Wanneer er meerdere invoerwaarden zijn opgegeven, kan slechts één invoer zijn definesMbSize ingesteld op True.)
Ondanks onze duidelijke definitie van minibatchSize het aantal steekproeven tussen modelupdates, zijn er twee gevallen waarin we de definitie moeten versoepelen:
- Sequentiële gegevens: reeksen met variabele lengte vormen over het algemeen niet exact de aangevraagde minibatchgrootte. In dit geval worden zoveel mogelijk reeksen in een minibatch verpakt zonder de aangevraagde minibatchgrootte te overschrijden (met één uitzondering: Als de volgende reeks in het gerandomiseerde corpus de lengte van de minibatchgrootte overschrijdt, bestaat de minibatchgrootte uit deze reeks).
- gegevensparallellisme: Hier is de minibatchgrootte bij benadering, omdat ons randomisatie-algoritme op basis van segmenten niet kan garanderen dat elke werknemer precies hetzelfde aantal steekproeven ontvangt.
Alle bovenstaande overwegingen zijn ook van toepassing op epochSize, maar epochSize hebben enkele verschillen, zie hier.