我想在张量流模型中从输入图像中提取图像块。
假设输入图像为var go = function go(initialValue) {
var allDone = $.Deferred();
var doIt = function doIt(value, data) {
var p = void 0;
if (value !== initialValue) {
var deferred = $.Deferred();
var started = 0;
function process(ms) {
started = started || ms;
var elapsed = ms - started;
var done = elapsed >= 3000;
if (done) {
return deferred.resolve();
}
// do stuff with data
requestAnimationFrame(process);
}
process(0);
p = deferred.promise();
} else {
p = $.when();
}
if (value > 0) {
$.ajax("bunch/of/data.php", { param: value })
.then(function (data) {
return p.then(function () {
return doIt(value - 50000, data);
});
});
} else {
allDone.resolve();
}
};
doIt(initialValue);
return allDone.promise();
};
go(123593)
.then(function() {
console.log('all done');
});
,我想输出[batch, in_width, in_height, channels]
。 [no_patches, patch_width, patch_height, channels]
是可以从no_patches
中提取的补丁总数。
我发现input_image
可以完成这项工作。
但是,我不理解参数tf.extract_image_patches
和strides
的区别。
有人可以解释如何使用上述功能来完成工作吗?
答案 0 :(得分:1)
strides
是关于窗口在数据上的移动。
rates
是关于如何“展开”窗口的。
例如,如果您使用strides = [1,5,5,1]
,您的窗口会在第1和第2维中跳跃5个像素。如果您使用rates = [1,1,1,1]
,则窗口为“紧凑”,这意味着所有像素都是连续的。如果您使用rates = [1,1,2,1]
,那么您的窗口会在第二维展开,并且每2行占一个像素。
ksizes = [1,3,2,1]
示例(暂时忽略步幅):我们在左侧使用rates = [1,1,1,1]
,在我们使用rates = [1,1,2,1]
的中间,右侧我们使用rates = [1,2,2,1]
:
* * 3 4 5 * 2 * 4 5 * 2 * 4 5
* * 8 9 10 * 7 * 9 10 6 7 8 9 10
* * 13 14 15 * 12 * 14 15 * 12 * 14 15
16 17 18 19 20 16 17 18 19 20 16 17 18 19 20
21 22 23 24 25 21 22 23 24 25 * 22 * 24 25