运行vgg16需要什么配置
‘壹’ vgg16 和vgg19的区别
训练配置:batchsize=128
caffe自有的imagenet with cuDNN模型快于googlenet with cuDNN
VGG16层不用cuDNN慢于caffe自有的imagenet with cuDNN模型
VGG19层不用cuDNN慢于caffe自有的imagenet with cuDNN模型
一、CAFFE 自带配置,使用cuDNN
Forward速度 : 220ms
Backward速度 :360ms
二、CAFFE 自带配置,不使用cuDNN
Forward速度 : 300ms
Backward速度 :410ms
三、GoogleNet,使用cuDNN
Forward速度 : 614ms
Backward速度 :1377ms
四、GoogleNet,不使用cuDNN
Forward速度 : 1145ms
Backward速度 :2009ms
五、VGG16层,使用cuDNN
Forward速度 : 3101ms
Backward速度 :8002ms
六、VGG19层,使用cuDNN
Forward速度 : 3972ms
Backward速度 :8540ms
回答不容易,希望能帮到您,满意请帮忙一下, !
‘贰’ 如何使用网络的bottleneck特征提升准确率
一个稍微讲究一点的办法是,利用在大规模数据集上预训练好的网络。这样的网络在多数的计算机视觉问题上都能取得不错的特征,利用这样的特征可以让我们获得更高的准确率。
我们将使用vgg-16网络,该网络在ImageNet数据集上进行训练,这个模型我们之前提到过了。因为ImageNet数据集包含多种“猫”类和多种“狗”类,这个模型已经能够学习与我们这个数据集相关的特征了。事实上,简单的记录原来网络的输出而不用bottleneck特征就已经足够把我们的问题解决的不错了。不过我们这里讲的方法对其他的类似问题有更好的推广性,包括在ImageNet中没有出现的类别的分类问题。
VGG-16的网络结构如下:
我们的方法是这样的,我们将利用网络的卷积层部分,把全连接以上的部分抛掉。然后在我们的训练集和测试集上跑一遍,将得到的输出(即“bottleneck feature”,网络在全连接之前的最后一层激活的feature map)记录在两个numpy array里。然后我们基于记录下来的特征训练一个全连接网络。
我们将这些特征保存为离线形式,而不是将我们的全连接模型直接加到网络上并冻结之前的层参数进行训练的原因是处于计算效率的考虑。运行VGG网络的代价是非常高昂的,尤其是在CPU上运行,所以我们只想运行一次。这也是我们不进行数据提升的原因。
我们不再赘述如何搭建vgg-16网络了,这件事之前已经说过,在keras的example里也可以找到。但让我们看看如何记录bottleneck特征。
generator = datagen.flow_from_directory(
'data/train',
target_size=(150, 150),
batch_size=32,
class_mode=None, # this means our generator will only yield batches of data, no labels
shuffle=False) # our data will be in order, so all first 1000 images will be cats, then 1000 dogs
# the predict_generator method returns the output of a model, given
# a generator that yields batches of numpy data
bottleneck_features_train = model.predict_generator(generator, 2000)
# save the output as a Numpy array
np.save(open('bottleneck_features_train.npy', 'w'), bottleneck_features_train)
generator = datagen.flow_from_directory(
'data/validation',
target_size=(150, 150),
batch_size=32,
class_mode=None,
shuffle=False)
bottleneck_features_validation = model.predict_generator(generator, 800)
np.save(open('bottleneck_features_validation.npy', 'w'), bottleneck_features_validation)
记录完毕后我们可以将数据载入,用于训练我们的全连接网络:
train_data = np.load(open('bottleneck_features_train.npy'))
# the features were saved in order, so recreating the labels is easy
train_labels = np.array([0] * 1000 + [1] * 1000)
validation_data = np.load(open('bottleneck_features_validation.npy'))
validation_labels = np.array([0] * 400 + [1] * 400)
model = Sequential()
model.add(Flatten(input_shape=train_data.shape[1:]))
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy'])
model.fit(train_data, train_labels,
nb_epoch=50, batch_size=32,
validation_data=(validation_data, validation_labels))
model.save_weights('bottleneck_fc_model.h5')
因为特征的size很小,模型在CPU上跑的也会很快,大概1s一个epoch,最后我们的准确率是90%~91%,这么好的结果多半归功于预训练的vgg网络帮助我们提取特征。
下面是代码:
[python] view plain
import os
import h5py
import numpy as np
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras.layers import Convolution2D, MaxPooling2D, ZeroPadding2D
from keras.layers import Activation, Dropout, Flatten, Dense
import sys
defaultencoding = 'utf-8'
if sys.getdefaultencoding() != defaultencoding:
reload(sys)
sys.setdefaultencoding(defaultencoding)
# path to the model weights file.
weights_path = '../weights/vgg16_weights.h5'
top_model_weights_path = 'bottleneck_fc_model.h5'
# dimensions of our images.
img_width, img_height = 150, 150
train_data_dir = '../data/train'
validation_data_dir = '../data/validation'
nb_train_samples = 2000
nb_validation_samples = 800
nb_epoch = 50
def save_bottlebeck_features():
datagen = ImageDataGenerator(rescale=1./255)
# build the VGG16 network
model = Sequential()
model.add(ZeroPadding2D((1, 1), input_shape=(3, img_width, img_height)))
model.add(Convolution2D(64, 3, 3, activation='relu', name='conv1_1'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(64, 3, 3, activation='relu', name='conv1_2'))
model.add(MaxPooling2D((2, 2), strides=(2, 2)))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(128, 3, 3, activation='relu', name='conv2_1'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(128, 3, 3, activation='relu', name='conv2_2'))
model.add(MaxPooling2D((2, 2), strides=(2, 2)))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(256, 3, 3, activation='relu', name='conv3_1'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(256, 3, 3, activation='relu', name='conv3_2'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(256, 3, 3, activation='relu', name='conv3_3'))
model.add(MaxPooling2D((2, 2), strides=(2, 2)))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, 3, 3, activation='relu', name='conv4_1'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, 3, 3, activation='relu', name='conv4_2'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, 3, 3, activation='relu', name='conv4_3'))
model.add(MaxPooling2D((2, 2), strides=(2, 2)))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, 3, 3, activation='relu', name='conv5_1'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, 3, 3, activation='relu', name='conv5_2'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, 3, 3, activation='relu', name='conv5_3'))
model.add(MaxPooling2D((2, 2), strides=(2, 2)))
# load the weights of the VGG16 networks
# (trained on ImageNet, won the ILSVRC competition in 2014)
# note: when there is a complete match between your model definition
# and your weight savefile, you can simply call model.load_weights(filename)
assert os.path.exists(weights_path), 'Model weights not found (see "weights_path" variable in script).'
f = h5py.File(weights_path)
for k in range(f.attrs['nb_layers']):
if k >= len(model.layers):
# we don't look at the last (fully-connected) layers in the savefile
break
g = f['layer_{}'.format(k)]
weights = [g['param_{}'.format(p)] for p in range(g.attrs['nb_params'])]
model.layers[k].set_weights(weights)
f.close()
print('Model loaded.')
generator = datagen.flow_from_directory(
train_data_dir,
target_size=(img_width, img_height),
batch_size=32,
class_mode=None,
shuffle=False)
print('generator ok.')
bottleneck_features_train = model.predict_generator(generator, nb_train_samples)
print('predict ok.')
np.save(open('bottleneck_features_train.npy', 'wb'), bottleneck_features_train)
generator = datagen.flow_from_directory(
validation_data_dir,
target_size=(img_width, img_height),
batch_size=32,
class_mode=None,
shuffle=False)
bottleneck_features_validation = model.predict_generator(generator, nb_validation_samples)
np.save(open('bottleneck_features_validation.npy', 'wb'), bottleneck_features_validation)
print('save_bottlebeck_features ok')
def train_top_model():
train_data = np.load(open('bottleneck_features_train.npy'))
train_labels = np.array([0] * (nb_train_samples / 2) + [1] * (nb_train_samples / 2))
validation_data = np.load(open('bottleneck_features_validation.npy'))
validation_labels = np.array([0] * (nb_validation_samples / 2) + [1] * (nb_validation_samples / 2))
model = Sequential()
model.add(Flatten(input_shape=train_data.shape[1:]))
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy'])
model.fit(train_data, train_labels,
nb_epoch=nb_epoch, batch_size=32,
validation_data=(validation_data, validation_labels))
model.save_weights(top_model_weights_path)
print('train_top_model ok')
save_bottlebeck_features()
train_top_model()
‘叁’ 深度学习 caffe flatten层怎么配置
flatten层用来扁平参数用,一般用在卷积层与全链接层之间,可以从vgg16网络中可以看出,但是在后来的网络中用GlobalAveragePooling2D代替了flatten层,可以从vgg16与inceptionV3网络对比看出。从参数的对比可以看出,显然这种改进大大的减少了参数的使用量,避免了过拟合现象。
from keras.models import Sequential
from keras.layers.core import Flatten
from keras.layers.convolutional import Convolution2D
from keras.utils.vis_utils import plot_model
model = Sequential()
model.add(Convolution2D(64,3,3,border_mode="same",input_shape=(3,32,32)))
# now:model.output_shape==(None,64,32,32)
model.add(Flatten())
# now: model.output_shape==(None,65536)
plot_model(model, to_file='Flatten.png', show_shapes=True)
(3)运行vgg16需要什么配置扩展阅读
应用
计算机视觉
香港中文大学的多媒体实验室是最早应用深度学习进行计算机视觉研究的华人团队。在世界级人工智能竞赛LFW(大规模人脸识别竞赛)上,该实验室曾力压FaceBook夺得冠军,使得人工智能在该领域的识别能力首次超越真人。
语音识别
微软研究人员通过与hinton合作,首先将RBM和DBN引入到语音识别声学模型训练中,并且在大词汇量语音识别系统中获得巨大成功,使得语音识别的错误率相对减低30%。但是,DNN还没有有效的并行快速算法,很多研究机构都是在利用大规模数据语料通过GPU平台提高DNN声学模型的训练效率。
在国际上,IBM、google等公司都快速进行了DNN语音识别的研究,并且速度飞快。
国内方面,阿里巴巴、科大讯飞、网络、中科院自动化所等公司或研究单位,也在进行深度学习在语音识别上的研究。
参考资料来源:网络-深度学习
‘肆’ 如何在ubuntu终端运行python脚本
在ubuntu终端运行python脚本的方法:1、打开终端,查看当前存在的虚拟环境;2、激活需要使用的虚拟环境;3、进入到python脚本所在的目录下;4、执行【python 脚本名】命令即可运行脚本。
具体方法:
(推荐教程:Python入门教程)
1、打开终端,输入'conda env list'命令查看当前存在的虚拟环境(如果没有合适的环境,则需要新建);
2、使用'conda activate pytorch1.0'命令激活将要使用的虚拟环境;
3、使用'cd'命令进入存放demo.py文件的目录下;
4、使用'python'命令运行demo.py文件,同时给部分参数赋值;
参数:
--net vgg16:backbone网络选择vgg16
--cuda:启用gpu
--load_dir models:在models文件夹下加载所需的文件
‘伍’ gtx1060 6G能加载VGG16模型完成预测任务吗
程序的运行和机器的CPU,内存,独立显示核心等硬件配置有直接的关系,另外也和系统,驱动,其他软件等也有联系。当前,是否可以玩一个游戏,首先需要查看游戏运行的配置要求和机器的配置要求做一个对比,查看机器的配置是否符合。如果可以满足游戏的最低运行需求,则可以支持。"
‘陆’ googlenet 如何把1000类编程两类
训练配置:batchsize=128
caffe自有的imagenet with cuDNN模型快于googlenet with cuDNN
VGG16层不用cuDNN慢于caffe自有的imagenet with cuDNN模型
VGG19层不用cuDNN慢于caffe自有的imagenet with cuDNN模型
一、CAFFE 自带配置,使用cuDNN
Forward速度 : 220ms
Backward速度 :360ms
二、CAFFE 自带配置,不使用cuDNN
Forward速度 : 300ms
Backward速度 :410ms
三、GoogleNet,使用cuDNN
Forward速度 : 614ms
Backward速度 :1377ms
四、GoogleNet,不使用cuDNN
Forward速度 : 1145ms
Backward速度 :2009ms
五、VGG16层,使用cuDNN
Forward速度 : 3101ms
Backward速度 :8002ms
六、VGG19层,使用cuDNN
Forward速度 : 3972ms
Backward速度 :8540ms
‘柒’ 如何在caffe框架下通过CNN提取图像的特征
Oxford VGGnet官网里面已经下载了在imgenet上训练好的VGG16.caffemodel文件,以及相应的配置文件VGG16.prototxt,然后准备用matlab提取图像经过VGGnet的特征。现在的问题是,VGG16.prototxt里网络最后一层是经过softmax层的1000维向量,而我想要的是全连接层(fc7)的4096维特征。。。然后我试着吧VGG16.prototxt里fc7层之后的网络定义
‘捌’ 怎么打印pt权重文件所有参数
首先需要安装torchsummary。
在相应的虚拟环境下pip install torchsummary
1、打印每层参数信息:summary(net,input_size,batch_size,device),net:网络模型input_size:网络输入图片的shape,batch_size:默认参数为-1,device:在gpu上还是cpu上运行,默认是cuda在gpu上运行,若想在cpu上运行,需将参数改为cpu。
eg.vgg16网络:from models import VGG16_torch,model = vgg16()summary(model,(3,32,32),device=‘cpu’)