由這個矩陣的樣子,很容易就想到協方差矩陣。如果協方差矩陣是什麼忘了的化可以參考[2],可以看到gram矩陣是沒有減去均值的協方差矩陣。協方差矩陣是一種相關性度量的矩陣,通過協方差來度量相關性,也就是度量兩個風格的相似性。(如果相對協方差和相關係數有進一步了解,可以參考[3])
了解gram矩陣的概念和性質 ,我們就來看一看如何用**來實現gram矩陣的計算。這裡,使用pytorch來實現計算過程。
pytorch中有兩個函式torch.mm
和torch.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千萬個數的大根堆,但是還需要建...