第一卷:初入江湖
第1章:武林新秀遇Tensor - 張量基礎
晨起碼農村
雞鳴三聲,林小碼已經收拾好了行囊。他最后看了眼床頭那本翻舊的《Python入門心法》,輕輕撫平卷起的書角。
"小碼,路上小心。"父親將一把青銅匕首塞進他手中,“這是祖傳的NumPy匕首,雖不及當世神兵,但足以防身。”
母親紅著眼眶遞來包袱:“娘給你烙了Tensor燒餅,路上餓了就吃。”
林小碼跪地叩首:"孩兒此去,定要拜入PyTorch派學藝!"轉身時,他聽見父親低聲對母親說:“這孩子打小就愛琢磨那些數字陣法,或許真能…”
晨霧中,少年的身影漸行漸遠。他腰間除了匕首,還別著本藍皮冊子——《張量的七十二變》。
青云鎮初遇
三日后,林小碼站在青云鎮的石板街上,這里正舉辦十年一度的"深度學習武林大會"。街邊小販吆喝著:
“來看來瞧!新鮮出爐的MNIST手寫符!”
“Kaggle比武大會報名處,頭獎千金!”
突然,前方傳來一陣騷動。只見一群錦衣少年圍著個賣藝老者起哄:
“老騙子!你這發光方塊算什么武功?”
“就是!我們TensorFlow幫的矩陣劍法才叫真功夫!”
老者不慌不忙,面前懸浮的發光立方體突然分裂成無數小塊,在空中組成"歡迎來到PyTorch派"字樣。
"這…"林小碼瞳孔微縮,“竟是三維張量分解!”
張量大師
傍晚,林小碼在客棧后院練劍時,那賣藝老者竟坐在墻頭喝酒。
“小子,白天的招式,你看懂了幾分?”
林小碼連忙行禮:“前輩莫非就是傳說中的Tensor大師?晚輩只見您將(8,8,8)張量reshape成了(512,)…”
老者突然將酒葫蘆拋向空中,葫蘆化作數百個細小張量,又重組為茶壺模樣。
"好眼力!但reshape只是基礎。"大師手指輕點,茶壺又變成駿馬形態,“真正的張量運算,在于…”
突然,客棧老板沖進來:“不好啦!TensorFlow幫的人來砸場子了!”
初次比武
前院站著三個錦衣少年,為首的冷笑道:“老東西,敢在我們地盤演示PyTorch邪術?”
大師將林小碼推到前面:“小友,可敢用方才所學應戰?”
"我?"林小碼手心冒汗,但想起包袱里的Tensor燒餅,突然有了主意。
他掏出燒餅掰成四塊:“看招!torch.chunk(燒餅,4)”
四塊燒餅在空中化作張量,擊中對方劍陣的薄弱處。錦衣少年們驚愕地發現,他們的"TF矩陣劍"竟被幾個一維張量打亂了節奏。
"有意思。"大師捻須微笑,“但你可知為何能破陣?”
林小碼思索道:“因為他們用static shape,而我們用dynamic shape?”
深夜授藝
是夜,大師帶林小碼來到后山。
"看好了。"大師雙手結印,地面浮現巨大計算圖,“這才是張量的精髓。”
他演示了:
- 張量創建:從普通數組到GPU張量的蛻變
cpu_tensor = torch.tensor([1,2,3]) # 凡鐵
gpu_tensor = cpu_tensor.cuda() # 百煉成鋼
- 自動廣播:小張量如何智取大張量
- 內存共享:view與reshape的江湖恩怨
突然,林小碼發現大師演示的最后一個張量形狀有誤:“前輩,這個(3,4)張量不能直接view成(7)啊!”
大師哈哈大笑:“好!發現shape不匹配錯誤,你已入門了!”
技術揭秘
# 武俠比喻:
# - 張量如內力,可剛可柔,變化萬千
# - reshape是易容術,view是分身法
# - GPU加速乃輕功提縱術# 技術實質:
import torch
# 創建張量
x = torch.arange(24).reshape(2,3,4) # 三維張量
# 自動廣播
y = torch.tensor([1,2,3]) # 形狀(3,)
z = x + y # 自動擴展為(2,3,4)
# 內存共享
a = x[:,1,:] # 共享內存的視圖# 關鍵要點:
# 1. 張量是PyTorch的基礎數據結構
# 2. 支持CPU/GPU兩種運算設備
# 3. 自動廣播機制簡化運算
# 4. 視圖操作不復制數據
下章預告:深夜,林小碼發現大師的計算圖中暗藏玄機…那些流動的數字背后,竟是傳說中的Autograd神功!