中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Keras如何使用ImageNet上預訓練的模型

發布時間:2020-07-22 14:21:56 來源:億速云 閱讀:212 作者:小豬 欄目:開發技術

這篇文章主要講解了Keras如何使用ImageNet上預訓練的模型,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。

我就廢話不多說了,大家還是直接看代碼吧!

import keras
import numpy as np
from keras.applications import vgg16, inception_v3, resnet50, mobilenet
 
#Load the VGG model
vgg_model = vgg16.VGG16(weights='imagenet')
 
#Load the Inception_V3 model
inception_model = inception_v3.InceptionV3(weights='imagenet')
 
#Load the ResNet50 model
resnet_model = resnet50.ResNet50(weights='imagenet')
 
#Load the MobileNet model
mobilenet_model = mobilenet.MobileNet(weights='imagenet')

在以上代碼中,我們首先import各種模型對應的module,然后load模型,并用ImageNet的參數初始化模型的參數。

如果不想使用ImageNet上預訓練到的權重初始話模型,可以將各語句的中'imagenet'替換為'None'。

補充知識:keras上使用alexnet模型來高準確度對mnist數據進行分類

綱要

本文有兩個特點:一是直接對本地mnist數據進行讀取(假設事先已經下載或從別處拷來)二是基于keras框架(網上多是基于tf)使用alexnet對mnist數據進行分類,并獲得較高準確度(約為98%)

本地數據讀取和分析

很多代碼都是一開始簡單調用一行代碼來從網站上下載mnist數據,雖然只有10來MB,但是現在下載速度非常慢,而且經常中途出錯,要費很大的勁才能拿到數據。

(X_train, y_train), (X_test, y_test) = mnist.load_data()

其實可以單獨來獲得這些數據(一共4個gz包,如下所示),然后調用別的接口來分析它們。

Keras如何使用ImageNet上預訓練的模型

mnist = input_data.read_data_sets("./MNIST_data", one_hot = True) #導入已經下載好的數據集,"./MNIST_data"為存放mnist數據的目錄

x_train = mnist.train.images
y_train = mnist.train.labels
x_test = mnist.test.images
y_test = mnist.test.labels

這里面要注意的是,兩種接口拿到的數據形式是不一樣的。 從網上直接下載下來的數據 其image data值的范圍是0~255,且label值為0,1,2,3...9。 而第二種接口獲取的數據 image值已經除以255(歸一化)變成0~1范圍,且label值已經是one-hot形式(one_hot=True時),比如label值2的one-hot code為(0 0 1 0 0 0 0 0 0 0)

所以,以第一種方式獲取的數據需要做一些預處理(歸一和one-hot)才能輸入網絡模型進行訓練 而第二種接口拿到的數據則可以直接進行訓練。

Alexnet模型的微調

按照公開的模型框架,Alexnet只有第1、2個卷積層才跟著BatchNormalization,后面三個CNN都沒有(如有說錯,請指正)。如果按照這個來搭建網絡模型,很容易導致梯度消失,現象就是 accuracy值一直處在很低的值。 如下所示。

Keras如何使用ImageNet上預訓練的模型

在每個卷積層后面都加上BN后,準確度才迭代提高。如下所示

Keras如何使用ImageNet上預訓練的模型

完整代碼

import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation, Flatten
from keras.layers.convolutional import Conv2D, MaxPooling2D, ZeroPadding2D
from keras.layers.normalization import BatchNormalization
from keras.callbacks import ModelCheckpoint
import numpy as np
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data #tensorflow已經包含了mnist案例的數據
 
batch_size = 64
num_classes = 10
epochs = 10
img_shape = (28,28,1)
 
# input dimensions
img_rows, img_cols = 28,28
 
# dataset input
#(x_train, y_train), (x_test, y_test) = mnist.load_data()
mnist = input_data.read_data_sets("./MNIST_data", one_hot = True) #導入已經下載好的數據集,"./MNIST_data"為存放mnist數據的目錄
print(mnist.train.images.shape, mnist.train.labels.shape)
print(mnist.test.images.shape, mnist.test.labels.shape)
print(mnist.validation.images.shape, mnist.validation.labels.shape)
 
x_train = mnist.train.images
y_train = mnist.train.labels
x_test = mnist.test.images
y_test = mnist.test.labels
 
# data initialization
x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)
x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)
input_shape = (img_rows, img_cols, 1)
 
# Define the input layer
inputs = keras.Input(shape = [img_rows, img_cols, 1])
 
 #Define the converlutional layer 1
conv1 = keras.layers.Conv2D(filters= 64, kernel_size= [11, 11], strides= [1, 1], activation= keras.activations.relu, use_bias= True, padding= 'same')(inputs)
# Define the pooling layer 1
pooling1 = keras.layers.AveragePooling2D(pool_size= [2, 2], strides= [2, 2], padding= 'valid')(conv1)
# Define the standardization layer 1
stand1 = keras.layers.BatchNormalization(axis= 1)(pooling1)
 
# Define the converlutional layer 2
conv2 = keras.layers.Conv2D(filters= 192, kernel_size= [5, 5], strides= [1, 1], activation= keras.activations.relu, use_bias= True, padding= 'same')(stand1)
# Defien the pooling layer 2
pooling2 = keras.layers.AveragePooling2D(pool_size= [2, 2], strides= [2, 2], padding= 'valid')(conv2)
# Define the standardization layer 2
stand2 = keras.layers.BatchNormalization(axis= 1)(pooling2)
 
# Define the converlutional layer 3
conv3 = keras.layers.Conv2D(filters= 384, kernel_size= [3, 3], strides= [1, 1], activation= keras.activations.relu, use_bias= True, padding= 'same')(stand2)
stand3 = keras.layers.BatchNormalization(axis=1)(conv3)
 
# Define the converlutional layer 4
conv4 = keras.layers.Conv2D(filters= 384, kernel_size= [3, 3], strides= [1, 1], activation= keras.activations.relu, use_bias= True, padding= 'same')(stand3)
stand4 = keras.layers.BatchNormalization(axis=1)(conv4)
 
# Define the converlutional layer 5
conv5 = keras.layers.Conv2D(filters= 256, kernel_size= [3, 3], strides= [1, 1], activation= keras.activations.relu, use_bias= True, padding= 'same')(stand4)
pooling5 = keras.layers.AveragePooling2D(pool_size= [2, 2], strides= [2, 2], padding= 'valid')(conv5)
stand5 = keras.layers.BatchNormalization(axis=1)(pooling5)
 
# Define the fully connected layer
flatten = keras.layers.Flatten()(stand5)
fc1 = keras.layers.Dense(4096, activation= keras.activations.relu, use_bias= True)(flatten)
drop1 = keras.layers.Dropout(0.5)(fc1)
 
fc2 = keras.layers.Dense(4096, activation= keras.activations.relu, use_bias= True)(drop1)
drop2 = keras.layers.Dropout(0.5)(fc2)
 
fc3 = keras.layers.Dense(10, activation= keras.activations.softmax, use_bias= True)(drop2)
 
# 基于Model方法構建模型
model = keras.Model(inputs= inputs, outputs = fc3)
# 編譯模型
model.compile(optimizer= tf.train.AdamOptimizer(0.001),
       loss= keras.losses.categorical_crossentropy,
       metrics= ['accuracy'])
# 訓練配置,僅供參考
model.fit(x_train, y_train, batch_size= batch_size, epochs= epochs, validation_data=(x_test,y_test))

看完上述內容,是不是對Keras如何使用ImageNet上預訓練的模型有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大同县| 肥乡县| 海兴县| 定日县| 呼图壁县| 赫章县| 吉林市| 长子县| 灌阳县| 南通市| 郧西县| 施甸县| 郎溪县| 沅江市| 乃东县| 溧水县| 修水县| 黄梅县| 阳山县| 德保县| 兴海县| 资中县| 都江堰市| 桂林市| 满洲里市| 泰州市| 本溪市| 房产| 澄迈县| 古丈县| 宽甸| 珠海市| 安康市| 乌拉特前旗| 乌鲁木齐市| 蓝山县| 海晏县| 包头市| 临海市| 开封市| 东阿县|