我开始使用火炬7,我想制作我的数据集进行分类。我已经制作了像素图像和相应的标签。但是,我不知道如何将这些数据提供给火炬。我从其他人那里读了一些代码,发现他们正在使用扩展名为' .t7'的数据集。而且我认为这是一种张力型。这样对吗?我想知道如何将我的像素图像(实际上,我用Matlab通过使用MNIST数据集制作它们)转换成与火炬兼容的t7扩展。必须有t7格式的数据集结构,但我找不到它(也适用于标签)。
总而言之,我有像素图像和标签,并希望将它们转换为与火炬兼容的t7格式。
提前致谢!
答案 0 :(得分:5)
数据集' .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的表,其中一个标记为" data"另一个标有"标签"。
要回答您的问题,您应首先阅读您的图片(例如使用torchx:https://github.com/nicholas-leonard/torchx/blob/master/README.md),然后将其放入带有Tensor of label的表格中。以下代码只是一个帮助您的草案。它考虑的情况是:有两个类,所有图像都在同一个文件夹中,并通过这些类进行排序。
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)
应该可以制作一个不那么可怕的代码,但是这个代码详细说明了所有的步骤,并且适用于火炬7和Jupyter 5.0.0。
希望它有所帮助。
此致