训练具有约束力的多列CNN

时间:2019-06-03 10:11:29

标签: python python-3.x tensorflow keras tf.keras

我使用tf.keras部署了Inception v3模型,并且运行良好。目前,我正在尝试改进模型,使其能够一起处理多个补丁/图像,这是Lu等人在this article上所做的:有几个“列”(又名Inception模型的第一层) ),并且它们共享权重。但是,我有内存限制(我使用的是带有4GB RAM的GTX 980),我不能以幼稚的方式实现它,因为在尝试计算梯度时会变为OOM。它的批次大小(2!)和3列不是很小的OOM,因此每个批次“实际上”由6个图像组成。这不能解决问题:我想用更多的列来测试该体系结构。

是否存在让Keras(或直接Tensorflow)计算“列方向”梯度的更智能方法?让我引入一些表示法来解释按列的含义:将d(x_2,w_2)称为最后一个密集层,将c(x_1,w_1)称为列,其中x_i是该层的输入,而w_i是权重。然后可以计算(在内存禁忌内)d(c(x_1,w_1),w_2)的梯度。假设有一个函数u将多个k维张量“组合”为k维张量(如max,average,...)。然后我想计算(在内存禁忌内)d(u(c(x_11,w_1),...,c(x_1n,w_1)),w_2)的梯度。逐列的意思是一个技巧,它计算联合函数u的每个输入c(x_1i,w_1)的梯度。

0 个答案:

没有答案