keras进行图像分类时遇到的小问题


Q1:由于网速慢或者网络中断等原因,导致keras加载VGG16等模型权重失败,从而程序出错。

方法:可以直接删除,重新下载。

Keras-Github-教程
https://github.com/fchollet/deep-learning-models
原始权重下载地址
https://github.com/fchollet/deep-learning-models/releases
tf模型权重百度云下载地址
http://pan.baidu.com/s/1dE9giOD

注:1.从百度云盘下载权重文件最快

  2.删除文件时,采用 $ open .keras/models/  ,进入隐藏的文件夹,然后删除。(mac系统)

 

Q2:如何离线读取VGG16的训练权重。

方法:以个人为例,

model = applications.VGG16(include_top=False,

                       weights='/Users/******/.keras/models/vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5')

其中,******是自己电脑的账号名;vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5 是VGG16的权重文件;这样就可以离线读取VGG16的训练权重了。

 

Q3: model.add(Flatten(input_shape=train_data.shape[1:])),这句话的理解。(仅在图像识别这一块)

如果输入train_data.shape[0:],它会输出这样一个东西:[x1 , x2 , x3 , x4],其中x1表示样本数,x2表示图宽度,x3表示图高度,x4表示通道数。一般来说,样本数是不好指定的,所以一般只读取train_data.shape[1:]。(在tensorflow下如此,在theano中,4个含义的顺序好像不是这样。)

 

Q4: ValueError: Error when checking target: expected dense_2 to have shape (None, 3) but got array with shape (150, 1)

原因:当初自己出错是因为图形的标签是3类,我在 train_labels = np.array([0] * 1000 + [1] * 1000 + [2] * 1000) 操作之后,并没有将它分成3类,即生成3维,

需要加上这样一句代码 train_labels = np_utils.to_categorical(train_labels, 3),此外相应的,要加上 from keras.utils import np_utils

 

Q5: for layer in model.layers[:15]:
    layer.trainable = False

这句话是指将模型的前15层冰冻住,也就是在训练网络的过程中,前15层的网络参数始终不发生变化。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM