我有多个数据集,每个数据集中有不同数量的图像(和不同的图像尺寸)。在训练循环中,我想从所有数据集中随机加载一批图像,但是每一批仅包含来自单个数据集的图像。例如,我有数据集A,B,C,D,每个数据集都有图像01.jpg,02.jpg,…n.jpg(其中n取决于数据集),并且说批量大小为3。例如,我可能会在下一批[D / 01.jpg,D / 05.jpg,D / 12]中获取图像[B / 02.jpg,B / 06.jpg,B / 12.jpg] .jpg]等
到目前为止,我已经考虑了以下问题:
什么是最好的方法?谢谢!
答案 0 :(得分:0)
您可以使用ConcatDataset
,并向DataLoader
提供一个Ext.onReady(function(){
Ext.QuickTips.init();
Ext.FocusManager.enable();
// Stores
var baseStore = Ext.create('Ext.data.TreeStore', {
root: {
expanded: true,
leaf: false,
children: []
}
});
var sportsStore = Ext.create('Ext.data.TreeStore', {
root: {
expanded: true,
id: 133,
children: [
{
text: "Audi",
id: 1,
leaf: true
},
{
text: "sports cars",
expanded: true,
id: 2,
children: [{
id: 3,
text: "Porsche",
leaf: true
},
{
text: "Mustang",
id: 4,
leaf: true
}
]
},
{
text: "Jaguar",
id: 5,
leaf: true
}
]
}
});
var carStore = Ext.create('Ext.data.TreeStore', {
root: {
expanded: true,
id: 1444,
children: [
{
id: 6,
text: "Toyota",
leaf: true
},
{
text: "cars",
id: 7,
expanded: true,
children: [
{
id: 8,
text: "honda",
leaf: true
},
{
text: "Nissan",
id: 9,
leaf: true
}
]
},
{
text: "Kia",
id: 10,
leaf: true
}
]
}
});
// Filling data
function fillStore(xparent, xnode) {
for (var i = 0; i < xnode.childNodes.length; i++) {
var current = xnode.childNodes[i];
var added = xparent.appendChild(
{
text: current.data.text,
leaf: current.data.leaf,
id: current.data.id
}
);
if (current.data.leaf === false) {
fillStore(added, current);
}
}
}
function setStore(store) {
var root = baseStore.getRootNode();
if (root.hasChildNodes()) {
root.removeAll();
}
fillStore(root, store.getRootNode());
}
// First fill
setStore(carStore);
Ext.create('Ext.panel.Panel', {
title: 'Car Simple Tree',
width: 300,
height: 450,
renderTo: Ext.getBody(),
items: [
{
xtype: 'button',
text: 'sports',
handler: function() {
alert('You clicked the sports button!');
var t = Ext.getCmp('tp');
setStore(sportsStore);
}
},
{
xtype: 'button',
text: 'car',
handler: function() {
alert('You clicked the car button!');
var t = Ext.getCmp('tp');
setStore(carStore);
}
},
{
xtype: 'treepanel',
id: 'tp',
store: baseStore,
rootVisible: false,
lines: true
}
]
});
});
。
batch_sampler
concat_dataset = ConcatDataset((dataset1, dataset2))
将为您提供每个数据集之间的界限:
ConcatDataset.comulative_sizes
现在,您可以使用ds_indices = concat_dataset.cumulative_sizes
创建一个批处理采样器。请参阅the source for BatchSampler
以供参考。您的批次采样器只需要返回一个带有N个随机索引的列表,这些列表将遵守ds_indices
边界。这将确保您的批次将具有来自同一数据集的元素。