深度學習中的concatenate使用

2021-08-20 08:49:50 字數 2468 閱讀 3195

numpy.concatenate((a1, a2, ...), axis=0, out=none)
parameters:

a1, a2, … :

axis:

out :1.2.1 按照行進行合併

a = np.array([[1, 2], [3, 4]]) 

b = np.array([[5, 6]])

np.concatenate((a, b), axis=0) # 這裡的axis=0的表示按照行進行合併

輸出

array([[1, 2],

[3, 4],

[5, 6]])

1.2.2 按照列進行合併
a = np.array([[1, 2], [3, 4]]) 

b = np.array([[5, 6]])

np.concatenate((a, b.t), axis=1) # 這裡的axis=1的表示按照列進行合併

輸出:

array([[1, 2, 5],

[3, 4, 6]])

在深度學習中,我們也會遇到過需要進行網路層進行連線的地方,結合自己的研究方向,下面舉二個例子說明使用這種連線的地方。

###2.1 在u-net網路中使用concatenate

具體u-net如何使用可以參考文獻[2],這裡只是簡單介紹concatenate在u-net中的使用。u-net網路是在coding-decoding網路結構基礎上發展而來的,他輸入的是影象,輸出的也是影象,相當於是乙個end-to-end[3]網路結構。傳統的網路確實可以達到降低網路引數的功能,但是可能重建的效果不是太好,所以我們在deconding將coding過程中相同尺寸的feature map連線到我們decoding網路的feature map,這樣就充分了利用了coding網路中結構資訊,達到更好的去混迭、或者是重建效果。

近幾年的深度學習模型中,cnn[4]一直是絕對主導地位。resnet[7,8]、googlenet[6]、vgg[5]等優秀的網路都是基於cnn搭建的。然而,深層的cnn一直以來都存在乙個問題:資料在多層傳播後很可能會逐漸消失。resnet通過「skip connection」結構一定程度上在促進了資料在層間的流通,但接近輸出的網路層還是沒有充分獲得網路前面的特徵圖。另外提一點,在針對resnet研究,之後出現wrn[9]網路說明了resnets網路可能存在冗餘,提出了乙個寬而淺的網路,效果證明wrn效果也不錯。

在cvpr2017最佳**densely connected convolutional networks中作者提出了乙個新的densenets[10]網路,出發點是為了解決resnets出現的冗餘性問題。使用的引數更少,也緩解了梯度消失的問題,網路也更容易訓練。densenet和resnests在數學表達的區別就是把resnets中skip layer加法變成了concatenate連線運算。下面是densenets網路結構圖:

可見,將skip-layer變成了concatenate層,也就是說後面一層和整個網路前面所有層都建立乙個連線,這樣會減少網路網路層數,有利於網路的訓練。但是具體在使用各種框架實現densenets時候,可能會大大的占用視訊記憶體,作者又提出針對此問題的解決方法[11],解釋說這不是densenest本身的問題,而是目前的框架比如tensorflow、pytorch等對concatenate操作支援的不是的很好。

python官網

u-net: convolutional networks for biomedical image segmentation

什麼是 end-to-end 神經網路?

imagenet classification with deep convolutional neural networks

very deep convolutional networks for large-scale image recognition

going deeper with convolutions

deep residual learning for image recognition

wide residual networks

densely connected convolutional networks

memory-efficient implementation of densenets

深度學習中的大牛

只怪自己太貪玩,知道的少,不小心發現大牛都是一起的,圈子是真的小。大牛總是自帶光環與神秘感。最近一直晃蕩在學術圈,真的是很想志輝哥哥的,哼,思想太容易開小差。牛1 geoffrey hinton 傑弗里 辛頓 geoffrey hinton,被稱為 神經網路之父 深度學習鼻祖 他曾獲得愛丁堡大學人工...

深度學習中的Batch Normalization

batch normalization 假設我們有兩組training data x1 1,2,3,x 1 1,2 3,x2 100,200,300,x2 100,200,300,當我們利用這組資料進行機器學習的時候,會發現對於第一筆資料x1 x 1,它的梯度會比第二筆資料x2 x 2的梯度要小得多...

深度學習中的Batch Normalization

batch normalization原理 為了減少深度神經網路中的internal covariate shift,中提出了batch normalization演算法,首先是對 每一層 的輸入做乙個batch normalization 變換 批標準化 bactch normalization,...