Какова структура набора данных torch?

Я начинаю использовать Torch 7 и хочу создать свой набор данных для классификации. Я уже сделал пиксельные изображения и соответствующие метки. Однако я не знаю, как передать эти данные в факел. Я прочитал некоторые коды от других и узнал, что они используют набор данных с расширением «.t7», и я думаю, что это тензорный тип. Это правильно? И мне интересно, как я могу преобразовать свои пиксельные изображения (на самом деле, я сделал их с помощью Matlab с использованием набора данных MNIST) в расширение t7, совместимое с факелом. Должна быть структура набора данных в формате t7, но я не могу ее найти (и для меток тоже).

Подводя итог, у меня есть пиксельные изображения и метки, и я хочу преобразовать их в формат t7, совместимый с факелом.

Заранее спасибо!


person Minkyu Choi    schedule 06.06.2016    source источник
comment
Я не уверен, в каком формате torch принимает данные, но расширение .7z соответствует файлу, сжатому с помощью 7-zip (7-zip.org). Если люди предоставляют вам данные в этом формате, вам необходимо распаковать их перед использованием. то есть я очень сомневаюсь, что факел принимает файлы .7z.   -  person RPM    schedule 06.06.2016
comment
@RPM Вы правы. Это моя ошибка. Это не 7z а т7. Спасибо!   -  person Minkyu Choi    schedule 07.06.2016


Ответы (1)


Наборы данных «.t7» представляют собой таблицы помеченных тензоров. Например, следующий код lua:

if (not paths.filep("cifar10torchsmall.zip")) then
    os.execute('wget -c https://s3.amazonaws.com/torch7/data/cifar10torchsmall.zip')
    os.execute('unzip cifar10torchsmall.zip')
end
Readed_t7 = torch.load('cifar10-train.t7')
print(Readed_t7)

Вернется через itorch:

{
  data : ByteTensor - size: 10000x3x32x32
  label : ByteTensor - size: 10000
}

Это означает, что файл содержит таблицу из двух ByteTensor, один из которых помечен как «данные», а другой — как «метка».

Чтобы ответить на ваш вопрос, вы должны сначала прочитать свои изображения (например, с помощью torchx: https://github.com/nicholas-leonard/torchx/blob/master/README.md), затем поместите их в таблицу с вашим тензором метки. Следующий код — это всего лишь черновик, который поможет вам. Он рассматривает случай, когда: есть два класса, все ваши изображения находятся в одной папке и упорядочены по этим классам.

require 'torchx';

--Read all your dataset (the chosen extension is png)
files = paths.indexdir("/Path/to/your/images/", 'png', true)
data1 = {}
for i=1,files:size() do
   local img1 = image.load(files:filename(i),3)
   table.insert(data1, img1)
end

--Create the table of label according to 
label1 = {}
for i=1, #data1 do
    if i <= number_of_images_of_the_first_class then
        label1[i] = 1
    else
        label1[i] = 2
    end
end

--Reshape the tables to Tensors
label = torch.Tensor(label1)
data = torch.Tensor(#data1,3,16,16)
for i=1, #data1 do
    data[i] = data1[i]
end

--Create the table to save
Data_to_Write = { data = data, label = label }

--Save the table in the /tmp
torch.save("/tmp/Saved_Data.t7", Data_to_Write)

Должна быть возможность сделать менее отвратительный код, но этот подробно описывает все шаги и работает с torch 7 и Jupyter 5.0.0.

Надеюсь, поможет.

С Уважением

person Clement Bouvier    schedule 30.08.2016