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个含义的顺序好像不是这样。)
原因:当初自己出错是因为图形的标签是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层的网络参数始终不发生变化。