日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Keras框架:Alexnet网络代码实现

發(fā)布時(shí)間:2023/11/29 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Keras框架:Alexnet网络代码实现 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

網(wǎng)絡(luò)思想:


1、一張?jiān)紙D片被resize到(224,224,3);
2、使用步長(zhǎng)為4x4,大小為11的卷積核對(duì)圖像進(jìn)行卷積,輸出的特征層為96層, 輸出的shape為(55,55,96);
3、使用步長(zhǎng)為2的最大池化層進(jìn)行池化,此時(shí)輸出的shape為(27,27,96)
4、使用步長(zhǎng)為1x1,大小為5的卷積核對(duì)圖像進(jìn)行卷積,輸出的特征層為256層, 輸出的shape為(27,27,256);
5、使用步長(zhǎng)為2的最大池化層進(jìn)行池化,此時(shí)輸出的shape為(13,13,256);
6、使用步長(zhǎng)為1x1,大小為3的卷積核對(duì)圖像進(jìn)行卷積,輸出的特征層為384層, 輸出的shape為(13,13,384);
7、使用步長(zhǎng)為1x1,大小為3的卷積核對(duì)圖像進(jìn)行卷積,輸出的特征層為384層, 輸出的shape為(13,13,384);
8、使用步長(zhǎng)為1x1,大小為3的卷積核對(duì)圖像進(jìn)行卷積,輸出的特征層為256層, 輸出的shape為(13,13,256);
9、使用步長(zhǎng)為2的最大池化層進(jìn)行池化,此時(shí)輸出的shape為(6,6,256);
10、兩個(gè)全連接層,最后輸出為1000類

細(xì)節(jié)部分舉例:

第一層
第一層輸入數(shù)據(jù)為原始圖像的2242243的圖像,這個(gè)圖像被11113(3代表 深度,例如RGB的3通道)的卷積核進(jìn)行卷積運(yùn)算,卷積核對(duì)原始圖像的每次 卷積都會(huì)生成一個(gè)新的像素。 卷積核的步長(zhǎng)為4個(gè)像素,朝著橫向和縱向這兩個(gè)方向進(jìn)行卷積。 由此,會(huì)生成新的像素; 第一層有96個(gè)卷積核,所以就會(huì)形成555596個(gè)像素層。 pool池化層:這些像素層還需要經(jīng)過pool運(yùn)算(池化運(yùn)算)的處理,池化運(yùn) 算的尺度由預(yù)先設(shè)定為33,運(yùn)算的步長(zhǎng)為2,則池化后的圖像的尺寸為: (55-3)/2+1=27。即經(jīng)過池化處理過的規(guī)模為2727*96.

代碼實(shí)現(xiàn):

網(wǎng)絡(luò)主體部分:(AlexNet.py)

from keras.models import Sequential from keras.layers import Dense,Activation,Conv2D,MaxPooling2D,Flatten,Dropout,BatchNormalization from keras.datasets import mnist from keras.utils import np_utils from keras.optimizers import Adam# 注意,為了加快收斂,我將每個(gè)卷積層的filter減半,全連接層減為1024 def AlexNet(input_shape=(224,224,3),output_shape=2):# AlexNetmodel = Sequential()# 使用步長(zhǎng)為4x4,大小為11的卷積核對(duì)圖像進(jìn)行卷積,輸出的特征層為96層,輸出的shape為(55,55,96);# 所建模型后輸出為48特征層model.add(Conv2D(filters=48, kernel_size=(11,11),strides=(4,4),padding='valid',input_shape=input_shape,activation='relu'))model.add(BatchNormalization())# 使用步長(zhǎng)為2的最大池化層進(jìn)行池化,此時(shí)輸出的shape為(27,27,96)# 所建模型后輸出為48特征層model.add(MaxPooling2D(pool_size=(3,3), strides=(2,2), padding='valid'))# 使用步長(zhǎng)為1x1,大小為5的卷積核對(duì)圖像進(jìn)行卷積,輸出的特征層為256層,輸出的shape為(27,27,256);# 所建模型后輸出為128特征層model.add(Conv2D(filters=128, kernel_size=(5,5), strides=(1,1), padding='same',activation='relu'))model.add(BatchNormalization())# 使用步長(zhǎng)為2的最大池化層進(jìn)行池化,此時(shí)輸出的shape為(13,13,256);# 所建模型后輸出為128特征層model.add(MaxPooling2D(pool_size=(3,3),strides=(2,2),padding='valid'))# 使用步長(zhǎng)為1x1,大小為3的卷積核對(duì)圖像進(jìn)行卷積,輸出的特征層為384層,輸出的shape為(13,13,384);# 所建模型后輸出為192特征層model.add(Conv2D(filters=192, kernel_size=(3,3),strides=(1,1), padding='same', activation='relu')) # 使用步長(zhǎng)為1x1,大小為3的卷積核對(duì)圖像進(jìn)行卷積,輸出的特征層為384層,輸出的shape為(13,13,384);# 所建模型后輸出為192特征層model.add(Conv2D(filters=192, kernel_size=(3,3), strides=(1,1), padding='same', activation='relu'))# 使用步長(zhǎng)為1x1,大小為3的卷積核對(duì)圖像進(jìn)行卷積,輸出的特征層為256層,輸出的shape為(13,13,256);# 所建模型后輸出為128特征層model.add(Conv2D(filters=128, kernel_size=(3,3), strides=(1,1), padding='same', activation='relu'))# 使用步長(zhǎng)為2的最大池化層進(jìn)行池化,此時(shí)輸出的shape為(6,6,256);# 所建模型后輸出為128特征層model.add(MaxPooling2D(pool_size=(3,3), strides=(2,2), padding='valid'))# 兩個(gè)全連接層,最后輸出為1000類,這里改為2類(貓和狗)# 縮減為1024model.add(Flatten())model.add(Dense(1024, activation='relu'))model.add(Dropout(0.25))model.add(Dense(1024, activation='relu'))model.add(Dropout(0.25))model.add(Dense(output_shape, activation='softmax'))return model

圖像預(yù)處理部分:(utils.py)

import matplotlib.image as mpimg import numpy as np import cv2 import tensorflow as tf from tensorflow.python.ops import array_opsdef load_image(path):# 讀取圖片,rgbimg = mpimg.imread(path)# 將圖片修剪成中心的正方形short_edge = min(img.shape[:2])yy = int((img.shape[0] - short_edge) / 2)xx = int((img.shape[1] - short_edge) / 2)crop_img = img[yy: yy + short_edge, xx: xx + short_edge]return crop_imgdef resize_image(image, size):with tf.name_scope('resize_image'):images = []for i in image:i = cv2.resize(i, size)images.append(i)images = np.array(images)return imagesdef print_answer(argmax):with open("./data/model/index_word.txt","r",encoding='utf-8') as f:synset = [l.split(";")[1][:-1] for l in f.readlines()]# print(synset[argmax])return synset[argmax]

訓(xùn)練部分:(train.py)

from keras.callbacks import TensorBoard, ModelCheckpoint, ReduceLROnPlateau, EarlyStopping from keras.utils import np_utils from keras.optimizers import Adam from model.AlexNet import AlexNet import numpy as np import utils import cv2 from keras import backend as K #K.set_image_dim_ordering('tf') K.image_data_format() == 'channels_first'def generate_arrays_from_file(lines,batch_size):# 獲取總長(zhǎng)度n = len(lines)i = 0while 1:X_train = []Y_train = []# 獲取一個(gè)batch_size大小的數(shù)據(jù)for b in range(batch_size):if i==0:np.random.shuffle(lines)name = lines[i].split(';')[0]# 從文件中讀取圖像img = cv2.imread(r".\data\image\train" + '/' + name)img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)img = img/255X_train.append(img)Y_train.append(lines[i].split(';')[1])# 讀完一個(gè)周期后重新開始i = (i+1) % n# 處理圖像X_train = utils.resize_image(X_train,(224,224))X_train = X_train.reshape(-1,224,224,3)Y_train = np_utils.to_categorical(np.array(Y_train),num_classes= 2) yield (X_train, Y_train)if __name__ == "__main__":# 模型保存的位置log_dir = "./logs/"# 打開數(shù)據(jù)集的txtwith open(r".\data\dataset.txt","r") as f:lines = f.readlines()# 打亂行,這個(gè)txt主要用于幫助讀取數(shù)據(jù)來訓(xùn)練# 打亂的數(shù)據(jù)更有利于訓(xùn)練np.random.seed(10101)np.random.shuffle(lines)np.random.seed(None)# 90%用于訓(xùn)練,10%用于估計(jì)。num_val = int(len(lines)*0.1)num_train = len(lines) - num_val# 建立AlexNet模型model = AlexNet()# 保存的方式,3代保存一次checkpoint_period1 = ModelCheckpoint(log_dir + 'ep{epoch:03d}-loss{loss:.3f}-val_loss{val_loss:.3f}.h5',monitor='acc', save_weights_only=False, save_best_only=True, period=3)# 學(xué)習(xí)率下降的方式,acc三次不下降就下降學(xué)習(xí)率繼續(xù)訓(xùn)練reduce_lr = ReduceLROnPlateau(monitor='acc', factor=0.5, patience=3, verbose=1)# 是否需要早停,當(dāng)val_loss一直不下降的時(shí)候意味著模型基本訓(xùn)練完畢,可以停止early_stopping = EarlyStopping(monitor='val_loss', min_delta=0, patience=10, verbose=1)# 交叉熵model.compile(loss = 'categorical_crossentropy',optimizer = Adam(lr=1e-3),metrics = ['accuracy'])# 一次的訓(xùn)練集大小batch_size = 128print('Train on {} samples, val on {} samples, with batch size {}.'.format(num_train, num_val, batch_size))# 開始訓(xùn)練model.fit_generator(generate_arrays_from_file(lines[:num_train], batch_size),steps_per_epoch=max(1, num_train//batch_size),validation_data=generate_arrays_from_file(lines[num_train:], batch_size),validation_steps=max(1, num_val//batch_size),epochs=50,initial_epoch=0,callbacks=[checkpoint_period1, reduce_lr])model.save_weights(log_dir+'last1.h5')#保存模型

預(yù)測(cè)部分:(predict.py)

import numpy as np import utils import cv2 from keras import backend as K from model.AlexNet import AlexNet# K.set_image_dim_ordering('tf') K.image_data_format() == 'channels_first'if __name__ == "__main__":model = AlexNet()model.load_weights("./logs/last1.h5")img = cv2.imread("./test2.jpg")img_RGB = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)img_nor = img_RGB/255img_nor = np.expand_dims(img_nor,axis = 0)img_resize = utils.resize_image(img_nor,(224,224))#utils.print_answer(np.argmax(model.predict(img)))print('the answer is: ',utils.print_answer(np.argmax(model.predict(img_resize))))cv2.imshow("ooo",img)cv2.waitKey(0)

總結(jié)

以上是生活随笔為你收集整理的Keras框架:Alexnet网络代码实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 99精品中文字幕 | 亚欧乱色 | 日韩第一视频 | 97爱爱| 国产小视频在线 | 玉女心经是什么意思 | 日韩精品第二页 | 国产精品夜色一区二区三区 | 天堂中文网 | 成人在线观看小视频 | 被黑人猛躁10次高潮视频 | 成人教育av | 久久艹精品| 中文字幕在线观看线人 | 亚洲aaaaa特级 | 一级片网址| 一区二区三区影院 | 欧美日韩久久久 | 东京热毛片 | 摸丰满大乳奶水www免费 | 91高跟黑色丝袜呻吟动态图 | 中文字幕电影一区 | 亚洲精品网址 | 亚洲码无人客一区二区三区 | 捆绑裸体绳奴bdsm亚洲 | 国产普通话bbwbbwbbw | 成人免费视频观看视频 | 激情丁香婷婷 | 青青草精品 | 色丁香综合 | 欧美精品自拍 | 久久网址 | 一级黄色特级片 | av日韩在线播放 | 99国产精品久久久 | 97精品国产97久久久久久免费 | 国产激情91 | 来吧亚洲综合网 | 色哟哟在线免费观看 | 中文字幕一区二区三区四区免费看 | 亚洲天堂2014| 天天爽天天 | 中文字幕一区二区三区人妻不卡 | 亚洲一区二区三区四区在线观看 | 波多野结衣在线 | 精品国产视频一区二区三区 | 日韩av电影中文字幕 | 99久久人妻无码精品系列 | 亚洲第一看片 | 久久久久久久久久久久久av | 精品人妻午夜一区二区三区四区 | 欧美一级啪啪 | 成人小视频在线免费观看 | 黄色日b片 | 国产欧美一区二区三区免费看 | 成人性生生活性生交3 | sese在线视频| 日本黄页网址 | 黄色片视频播放 | 成人av第一页 | 玖玖热视频 | 肉嫁高柳在线 | 亚洲欧美日韩在线不卡 | 欧美一级片在线视频 | 日本三级在线视频 | 国产乱妇4p交换乱免费视频 | 黄色aa大片 | 青青草www | 九九九九精品九九九九 | 白白色视频在线 | 在线免费三级 | 麻豆视频网页 | 在线观看日本一区二区 | 人妖天堂狠狠ts人妖天堂狠狠 | 久久精品日韩 | 雪白的扔子视频大全在线观看 | 香港三级韩国三级日本三级 | 91在线视频观看 | 一区精品二区国产 | 国产美女一区二区 | 无遮挡国产 | 特一级黄色片 | 日本道中文字幕 | 妺妺窝人体色www聚色窝仙踪 | 在线观看一区二区视频 | 亚洲一区二区三区高清视频 | 国产成人精品一区在线播放 | 中文字幕国产专区 | 欧美一二区视频 | 亚洲av中文无码乱人伦在线观看 | 黄色片网站大全 | 日本黄色录像片 | 国产精品 色| 操丰满女人 | 人妻在客厅被c的呻吟 | 中文一区二区 | 日日爱669| 成人性生生活性生交全黄 | 国产色图视频 |