簡體   English   中英

MNIST張量流教程對matmul翻轉技巧有何意義?

[英]What does the MNIST tensorflow tutorial mean with matmul flipping trick?

實現回歸》中有關MNIST的ML入門教程,展示了如何在單行上進行回歸,然后進行解釋,其中提到了技巧的使用(強調我的意思):

y = tf.nn.softmax(tf.matmul(x, W) + b)

首先,我們用表達式tf.matmul(x, W)將x乘以tf.matmul(x, W) 這是從我們在方程中乘以Wx時得到的乘積翻轉過來的,這是處理x為具有多個輸入的2D張量的一個小技巧

這有什么竅門,為什么我們要使用它?

好吧,這里沒有把戲。 那條線基本上指向一個先前的方程式乘法順序

# Here the order of W and x, this equation for single example
y = Wx +b
# if you want to use batch of examples you need the change the order of multiplication; instead of using another transpose op
y = xW +b
# hence
y = tf.matmul(x, W)

好的,我認為要點是,如果您分批訓練(即一次訓練多個訓練集實例),TensorFlow始終假設x的第零維表示每個批次的事件數。

假設您想將維度M的訓練實例映射到維度N的目標實例。通常可以通過將x(列向量)與NxM矩陣相乘(並可選地向維度N添加偏差(也可以是a)列向量)),即

y = W * x + b,其中y也是列向量。

從線性代數的角度來看,這是完全可以的。 但是現在分批培訓就成為了重點,即一次培訓多個培訓實例。 為了理解這一點,最好不要將x(和y)視為維度M(和N)的向量,而是將其視為維度為Mx1(y為Nx1)的矩陣。 由於TensorFlow假定組成批處理的不同訓練實例沿第零維度對齊,因此這里遇到麻煩,因為第零維度被一個實例的不同元素占據。 然后,訣竅是轉置上述等式(請記住,乘積的轉置也會切換兩個轉置對象的順序):

y ^ T = x ^ T * W ^ T + b ^ T

這幾乎是本教程中簡短描述的內容。 請注意,現在y ^ T是尺寸為1xN的矩陣(實際上是行向量),而x ^ T是尺寸為1xM的矩陣(也是行向量)。 W ^ T是維度MxN的矩陣。 在本教程中,他們沒有寫x ^ T或y ^ T,而只是根據此轉置方程式定義占位符。 我唯一不清楚的一點是,為什么他們沒有定義b “換位方式”。 我假設+運算符會在必要時自動轉置b以獲得正確的尺寸。

現在,其余的工作非常簡單:如果批處理大於1個實例,則只需“堆疊”多個x (1xM)矩陣,比如說是一個尺寸為(AxM)的矩陣(其中A為批處理大小)。 b希望會自動廣播到該數量的事件(即到維度矩陣(AxN)。如果您使用

y ^ T = x ^ T * W ^ T + b ^ T,

您將獲得批次中每個元素的目標矩陣(AxN)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM