運行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』)