如何對batch的資料求Gram矩陣

2021-09-27 09:14:19 字數 1412 閱讀 5251

由這個矩陣的樣子,很容易就想到協方差矩陣。如果協方差矩陣是什麼忘了的化可以參考[2],可以看到gram矩陣是沒有減去均值的協方差矩陣。協方差矩陣是一種相關性度量的矩陣,通過協方差來度量相關性,也就是度量兩個風格的相似性。(如果相對協方差和相關係數有進一步了解,可以參考[3])

了解gram矩陣的概念和性質 ,我們就來看一看如何用**來實現gram矩陣的計算。這裡,使用pytorch來實現計算過程。

pytorch中有兩個函式torch.mmtorch.bmm前者是計算矩陣乘法,後者是計算batch資料的矩陣乘法,風格遷移中是對batch資料進行操作,所以使用bmm。

我們創造乙個batch為2,單通道,2*2大小的資料

a = torch.arange(

8, dtype=torch.

int)

.reshape(2,

1,2,

2)a>>

> tensor([[

[[0,

1],[

2,3]

]],[

[[4,

5],[

6,7]

]]], dtype=torch.int32)

之後從新reshape一下,將w和h通道的資料合起來,變成向量形式

features = a.view(2,

1,4)

features

>>

> tensor([[

[0,1

,2,3

]],[

[4,5

,6,7

]]], dtype=torch.int32)

為了構造計算gram矩陣的向量,對shape進行乙個交換操作

features_t = features.transpose(1,

2)features_t

>>

> tensor([[

[0],

[1],

[2],

[3]]

,[[4

],[5

],[6

],[7

]]], dtype=torch.int32)

之後用矩陣乘法把這兩個向量乘起來就可以了,就計算出gram矩陣了。

gram = features.bmm(features_t)

gram

>>

> tensor([[

[14]]

,[[126]]

], dtype=torch.int32)

[1]gram格拉姆矩陣在風格遷移中的應用

[2]如何直觀地理解「協方差矩陣」

[3]如何通俗易懂地解釋「協方差」與「相關係數」的概念?

深度學習中的batch的大小對學習效果與時間的影響

這個答案寫的很好,下次再總結下 batchsize 影響模型的泛化效能,小的batchsize能提高模型的泛化效能。隨機梯度下降演算法的原理如下 n是批量大小 batchsize 是學習率 learning rate 可知道除了梯度本身,這兩個因子直接決定了模型的權重更新,從優化本身來看它們是影響模...

關於在深度學習中訓練資料集的batch的經驗總結

由於深度學習的網格很大,用來訓練的資料集也很大。因此不可能一下子將所有資料集都輸入到網路中,便引入了batch size的概念,下面總結自己兩種常用的呼叫batch的方法 1 使用tensorflow,tf.train.batch 2 offset offset batch size len ima...

如何對大資料進行排序

現有8g的資料,其中都是無符號的int型,現有1g記憶體,如何對這些資料排序。答 首先建立乙個struct將資料報起來,結構體包含資料的值及它出現的次數。需要建立乙個大根堆,每個大根堆的乙個資料項是這個結構體,且此結構體 資料佔4位元組,詞頻佔8位元組 所以大概可以建8千萬個數的大根堆,但是還需要建...