操作系统: Ubuntu 16.04
已安装的CUDA和cuDNN版本: CUDA 8.0 CuDNN 5.1
TensorFlow v0.12.1
您好, 我在一个非常小的网络上收到OOM消息,并在2 GTX 1080上运行。 这是一个2层网络,前2层VGG,conv1_1,conv1_2。 输入图像是400x400,我正在尝试运行一批16的大小。
我的训练是从4个空间位置获取特征向量,并对其进行一些训练。 因此,例如,在2个VGG转换层之后,我将在每个像素处具有大小为64的特征向量,或者确切地说,是大小的张量[16,400,400,64]。 我想从4个位置获取这些向量,这意味着我将有4个长度为64的向量,然后计算它们的一些损失函数。
所以这是我的推理功能:
def inference(images, x1, y, x2, z, train=False):
# conv1_1
with tf.variable_scope('conv1_1') as scope:
kernel = _variable_with_weight_decay('weights', shape=[3, 3, 3, 64], wd=0.000, layer_name=scope.name)
conv = tf.nn.conv2d(images, kernel, [1, 1, 1, 1], padding='SAME')
biases = _variable_on_cpu('biases', [64], tf.constant_initializer(0.0), layer_name=scope.name)
conv1_1 = tf.nn.relu(tf.nn.bias_add(conv, biases), name=scope.name)
# conv1_2
with tf.variable_scope('conv1_2') as scope:
kernel = _variable_with_weight_decay('weights', shape=[3, 3, 64, 64], wd=0.000, layer_name=scope.name)
conv = tf.nn.conv2d(conv1_1, kernel, [1, 1, 1, 1], padding='SAME')
biases = _variable_on_cpu('biases', [64], tf.constant_initializer(0.0), layer_name=scope.name)
conv1_2 = tf.nn.relu(tf.nn.bias_add(conv, biases), name=scope.name)
in1=tf.reshape(conv1_2[0, x1[0][0], x1[0][1], :],[1,64])
in2=tf.reshape(conv1_2[0, y[0][0], y[0][1], :],[1,64])
in3=tf.reshape(conv1_2[0, x2[0][0], x2[0][1], :],[1,64])
in4=tf.reshape(conv1_2[0, z[0][0], z[0][1], :],[1,64])
for i in range (1, FLAGS.batch_size):
in1 = tf.concat(0,[in1,tf.reshape(conv1_2[i, x1[i][0], x1[i][1], :],[1,64])])
in2 = tf.concat(0,[in2,tf.reshape(conv1_2[i, y[i][0], y[i][1], :],[1,64])])
in3 = tf.concat(0,[in3,tf.reshape(conv1_2[i, x2[i][0], x2[i][1], :],[1,64])])
in4 = tf.concat(0,[in4,tf.reshape(conv1_2[i, z[i][0], z[i][1], :],[1,64])])
现在,每个in1,in2,in3,in4的大小为[16,64] 从这里开始,我计算了一些损失。 出于某种原因,我收到了一条OOM消息,尽管这是一个非常小的网络。 我想我采用这些特征向量的方式使得工具分配的内存比需要的大。
ResourceExhaustedError(参见上面的回溯):分配时的OOM 张量形状[16,400,400,64] [节点: gradients / strided_slice_84_grad / StridedSliceGrad = StridedSliceGrad [Index = DT_INT32,T = DT_FLOAT,begin_mask = 8, ellipsis_mask = 0,end_mask = 8,new_axis_mask = 0,shrink_axis_mask = 7, _device = “/作业:本地主机/复制:0 /任务:0 / GPU:0”](梯度/ strided_slice_84_grad /形状, strided_slice_84 / stack,strided_slice_84 / stack_1, strided_slice_84 / stack_2,gradients / Reshape_16_grad / Reshape)]]
[[节点:渐变/ conv1_1 / BiasAdd_grad / tuple / control_dependency_1 / _99 = _Recvclient_terminated = false,recv_device =“/ job:localhost / replica:0 / task:0 / cpu:0”, send_device = “/职业:本地主机/副本:0 /任务:0 / GPU:0”, send_device_incarnation = 1, tensor_name = “edge_2359_gradients / conv1_1 / BiasAdd_grad /元组/ control_dependency_1”, tensor_type = DT_FLOAT, _device = “/作业:本地主机/复制:0 /任务:0 / CPU:0”]]
提前感谢您的帮助!