簡體   English   中英

CNTK:從numpy數組創建MinibatchSource以進行多GPU培訓

[英]CNTK: Create MinibatchSource from numpy array for multi GPU training

我有預處理的圖像數據在numpy數組,我的腳本通過提供numpy數組與單GPU工作正常。 根據我的理解,我們需要為多個GPU培訓創建MinibatchSource 我正在檢查此示例( ConvNet_CIFAR10_DataAug_Distributed.py )以進行分布式培訓,但它使用*_map.txt ,它基本上是圖像文件的路徑列表(例如png)。 我想知道從numpy數組創建MinibatchSource的最佳方法是什么,而不是將numpy數組轉換回png文件。

您可以創建將多個圖像反序列化器組合到一個源中的復合讀取器。 首先,您需要創建兩個映射文件(帶有虛擬標簽)。 一個將包含所有輸入圖像,另一個將包含相應的目標圖像。 以下代碼是一個最小的實現,假設文件名為map1.txtmap2.txt

import numpy as np
import cntk as C
import cntk.io.transforms as xforms 
import sys

def create_reader(map_file1, map_file2):
    transforms = [xforms.scale(width=224, height=224, channels=3, interpolations='linear')]
    source1 = C.io.ImageDeserializer(map_file1, C.io.StreamDefs(
        source_image = C.io.StreamDef(field='image', transforms=transforms)))
    source2 = C.io.ImageDeserializer(map_file2, C.io.StreamDefs(
        target_image = C.io.StreamDef(field='image', transforms=transforms)))
    return C.io.MinibatchSource([source1, source2], max_samples=sys.maxsize, randomize=True)

x = C.input_variable((3,224,224))
y = C.input_variable((3,224,224))
# world's simplest model
model = C.layers.Convolution((3,3),3, pad=True)
z = model(x)
loss = C.squared_error(z, y)

reader = create_reader("map1.txt", "map2.txt")
trainer = C.Trainer(z, loss, C.sgd(z.parameters, C.learning_rate_schedule(.00001, C.UnitType.minibatch)))

minibatch_size = 2

input_map={
    x: reader.streams.source_image,
    y: reader.streams.target_image
}

for i in range(30):
    data=reader.next_minibatch(minibatch_size, input_map=input_map)
    print(data)
    trainer.train_minibatch(data)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM