在Windows+TensorFlow-GPU环境下实现VGGNet

参考文章

1.使用vgg16模型进行图片预测
2.keras系列︱Application中五款已训练模型、VGG16框架(Sequential式、Model式)解读(二)
3.使用keras预训练VGG16模型参数分类图像并提取特征

在使用这篇文章进行实验时,出现错误

ValueError: Negative dimension size caused by subtracting 2 from 1 for 'max_pooling2d_8/MaxPool' (op: 'MaxPool') with input shapes: [?,1,112,128].

错误原因:
input_shape=(3,224, 224)是theano的写法,而tensorflow需要写出:(224,224,3);
需要修改Input_size。也就是”channels_last”和”channels_first”数据格式的问题。
同理,用文章4(http://weibo.com/p/230418d76227260102wy4s)也有这个问题。
错误的解释文章(keras系列︱图像多分类训练与利用bottleneck features进行微调(三))
解决方法:
注意TensorFlow的数据格式问题,将input_shape=(3,height, width)换成input_shape=(height, width,3)格式

4.基于VGG-16深度学习预训练权重的图像类别预测

在导入权重文件时,报错

KeyError: "Can't open attribute (can't locate attribute: 'layer_names')"

错误原因:
没有科学上网导致的权值文件下载链接不可访问
解释文章 错误:KeyError: "Can't open attribute (can't locate attribute: 'layer_names')"
解决方法:
将权重文件下载到本地,并修改vgg16.py文件的如下代码段:

# load weights
    if weights == 'imagenet':
        if include_top:
            weights_path = get_file('vgg16_weights_tf_dim_ordering_tf_kernels.h5',
                                    WEIGHTS_PATH,
                                    cache_subdir='models')
        else:
            # weights_path = get_file('vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5',
            #                         WEIGHTS_PATH_NO_TOP,
            #                         cache_subdir='models')
            weights_path = 'yourpath/vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5'

其中yourpath是文件vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5所在的文件夹。
各个网络权重文件

你可能感兴趣的:(在Windows+TensorFlow-GPU环境下实现VGGNet)