第一卷:初入江湖
第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神功!