我想从vgg19中提取pool5层的功能。我正在使用tf-slim库。我得到一个非常奇怪的错误
TypeError: Cannot create initializer for non-floating point type.
我的图片是dtype = uint8的ndarrays。因此,为了解决此错误,我使用tf.to_float(images)
将图像更改为浮动。但现在它抱怨我的gpu内存不足,这非常奇怪。因为我有一个带有11gb vram的nvidia GeForce GTX 1080 Ti,并且没有运行其他进程。批量大小只有2000张图片。在切换到tf-slim之前我使用了caffe,这个批量大小根本不是问题。
我的代码就像:
with slim.arg_scope(vgg.vgg_arg_scope()):
_, end_points = vgg.vgg_19(tf.to_float(images), num_classes=1000,is_training=False)
init_fn = slim.assign_from_checkpoint_fn(
os.path.join(checkpoints_dir, 'vgg_19.ckpt'),
slim.get_model_variables('vgg_19'))
features = end_points['vgg_19/pool5']
正如您在上面看到的那样,我只是尝试从预训练的权重中提取pool5层的特征。那么这里的问题是什么?转换浮动有问题吗?正如我之前所说的,我使用了caffe,我甚至可以从20,000个图像中提取特征,这里只有2000个。特别是错误说:
ResourceExhaustedError (see above for traceback): OOM when allocating tensor with shape[2000,224,224,64]
[[Node: vgg_19/conv1/conv1_1/convolution = Conv2D[T=DT_FLOAT, data_format="NHWC", padding="SAME", strides=[1, 1, 1, 1], use_cudnn_on_gpu=true, _device="/job:localhost/replica:0/task:0/gpu:0"](ToFloat, vgg_19/conv1/conv1_1/weights/read)]]
[[Node: vgg_19/pool5/MaxPool/_77 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/cpu:0", send_device="/job:localhost/replica:0/task:0/gpu:0", send_device_incarnation=1, tensor_name="edge_154_vgg_19/pool5/MaxPool", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/cpu:0"]()]]
注意:图像变量的形状是[2000,224,224,3]
由于