1. 程式人生 > >CNN經典網路學習(我也很無奈因為要改網路結構)

CNN經典網路學習(我也很無奈因為要改網路結構)

ResNet50:

深度學習——殘差神經網路ResNet在分別在Keras和tensorflow框架下的應用案例 ღ( ´・ᴗ・` )比心

https://blog.csdn.net/ghw15221836342/article/details/79801627

使用Keras預訓練模型ResNet50進行影象分類

程式碼的理解參照了這裡:https://www.cnblogs.com/hezhiyao/tag/Coursera%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E8%AF%BE%E7%A8%8B%E7%AC%94%E8%AE%B0/default.html?page=1

(筆記和課程都很棒)

有個引數include_top不太明白,猜測。。。

# 這個include_top是什麼?
# 引數include_top表示是否包含模型底部的全連線層,
# 如果包含,則可以將影象分為ImageNet中的1000類,如果不包含,則可以利用這些引數來做一些定製的事情。
import numpy as np
from keras.layers import Dense
from keras.models import Model
from keras.preprocessing import image
from keras.applications.resnet50 import ResNet50

# 使用ResNet的結構,不包括最後一層
base_model = ResNet50(include_top = False, pooling = 'avg')

# 定義網路結構最後一層
predictions = Dense(3, activation='softmax')(base_model.output)

# 定義模型
model = Model(inputs=base_model.input, outputs=predictions)

# 載入訓練好的模型
model.load_weights('./weights.h5')

image_path = './lena.jpg'

# 載入影象
img = image.load_img(image_path, target_size=(224, 224))

# 影象預處理
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)

# 對影象進行分類
preds = model.predict(x)

# 輸出預測概率
print('Predicted:', preds)

 


 

VGG16:

 

基礎知識:

深度學習圖片卷積輸出大小計算公式

反捲積(Deconvolution)、上取樣(UNSampling)與上池化(UnPooling)

tensorflow conv2d的padding解釋以及引數解釋

【實驗問題1】如何實現反捲積?由於我自己的實驗pooling太多,導致特徵圖太小,嚴重影響結果。最後找到了反捲積這種解決辦法。程式碼實現如下,ps.如果我後面成功了,會貼出自己的程式碼⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄

https://blog.csdn.net/huangshaoyin/article/details/81004301

 

# 整體思路:
# 將反捲積分為兩個操作,一個是UpSampling2D(),用上取樣將原始圖片擴大,
# 然後用Conv2D()這個函式進行卷積操作,就可以完成簡單的反捲積。
# UpSampling2D(size=(2,2))就可以將圖片擴大1倍,比如原來為28*28的圖片,就會變為56*56。
keras.layers.convolutional.UpSampling2D(size=(2, 2), data_format=None)
# 進行卷積操作
keras.layers.convolutional.Conv2D(filters, kernel_size, strides=(1, 1), padding='valid', data_format=None, dilation_rate=(1, 1), activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)

另外一種:

Conv2DTranspose: 進行轉置的卷積操作(反捲積) https://keras.io/zh/layers/convolutional/

 

【實驗問題2】我想看我圖片經過每一次卷積之後輸出的特徵圖大小,用x.shape結果給我顯示(?,?,?,512)。只有深度,特徵圖的長寬呢??如何顯示前三個維度,第一個維度batchsize是1,我想知道2,3維度。

沒有圖片喂進去的時候都是placeholder,所以沒有顯示出具體的值。(test.py的時候有喂進去啊,也沒有顯示出值)

 

 


彙總:

今天意外收穫(但還不清楚原理):

Q:問一下,用gbdt做迴歸模型對目標值還需要歸一化嗎?

A:樹模型不需要歸一化