[{"data":1,"prerenderedAt":876},["ShallowReactive",2],{"content:\u002Fpytorch":3,"surround:\u002Fpytorch":866},{"id":4,"title":5,"body":6,"categories":842,"date":844,"description":845,"draft":846,"extension":847,"image":848,"meta":849,"navigation":851,"path":852,"permalink":852,"published":848,"readingTime":853,"recommend":848,"references":848,"seo":858,"sitemap":859,"stem":860,"tags":861,"type":864,"updated":844,"__hash__":865},"content\u002Fposts\u002F2026\u002Fpytorch.md","PyTorch 学习",{"type":7,"value":8,"toc":828},"minimark",[9,14,18,21,24,27,30,33,36,224,227,230,233,240,243,251,254,257,259,262,265,451,453,456,461,627,630,744,746,750,753,763,766,772,774,778,781],[10,11,13],"h2",{"id":12},"张量tensor","张量（Tensor）",[15,16,17],"p",{},"张量是一个多维数组，可以是标量、向量、矩阵或更高维度的数据结构。",[15,19,20],{},"在 PyTorch 中，张量（Tensor）是数据的核心表示形式，类似于 NumPy 的多维数组，但具有更强大的功能，例如支持 GPU 加速和自动梯度计算。",[15,22,23],{},"张量支持多种数据类型（整型、浮点型、布尔型等）。",[15,25,26],{},"张量可以存储在 CPU 或 GPU 中，GPU 张量可显著加速计算。",[28,29],"hr",{},[10,31,32],{"id":32},"创建张量",[15,34,35],{},"张量创建的方式有：",[37,38,39,62],"table",{},[40,41,42],"thead",{},[43,44,45,52,57],"tr",{},[46,47,48],"th",{},[49,50,51],"strong",{},"方法",[46,53,54],{},[49,55,56],{},"说明",[46,58,59],{},[49,60,61],{},"示例代码",[63,64,65,82,97,112,127,146,161,179,194,209],"tbody",{},[43,66,67,74,77],{},[68,69,70],"td",{},[71,72,73],"code",{"code":73},"torch.tensor(data)",[68,75,76],{},"从 Python 列表或 NumPy 数组创建张量。",[68,78,79],{},[71,80,81],{"code":81},"x = torch.tensor([[1, 2], [3, 4]])",[43,83,84,89,92],{},[68,85,86],{},[71,87,88],{"code":88},"torch.zeros(size)",[68,90,91],{},"创建一个全为零的张量。",[68,93,94],{},[71,95,96],{"code":96},"x = torch.zeros((2, 3))",[43,98,99,104,107],{},[68,100,101],{},[71,102,103],{"code":103},"torch.ones(size)",[68,105,106],{},"创建一个全为 1 的张量。",[68,108,109],{},[71,110,111],{"code":111},"x = torch.ones((2, 3))",[43,113,114,119,122],{},[68,115,116],{},[71,117,118],{"code":118},"torch.empty(size)",[68,120,121],{},"创建一个未初始化的张量。",[68,123,124],{},[71,125,126],{"code":126},"x = torch.empty((2, 3))",[43,128,129,134,141],{},[68,130,131],{},[71,132,133],{"code":133},"torch.rand(size)",[68,135,136,137,140],{},"创建一个服从均匀分布的随机张量，值在 ",[71,138,139],{"code":139},"[0, 1)"," 。",[68,142,143],{},[71,144,145],{"code":145},"x = torch.rand((2, 3))",[43,147,148,153,156],{},[68,149,150],{},[71,151,152],{"code":152},"torch.randn(size)",[68,154,155],{},"创建一个服从正态分布的随机张量，均值为 0，标准差为 1。",[68,157,158],{},[71,159,160],{"code":160},"x = torch.randn((2, 3))",[43,162,163,168,174],{},[68,164,165],{},[71,166,167],{"code":167},"torch.arange(start, end, step)",[68,169,170,171,140],{},"创建一个一维序列张量，类似于 Python 的 ",[71,172,173],{"code":173},"range",[68,175,176],{},[71,177,178],{"code":178},"x = torch.arange(0, 10, 2)",[43,180,181,186,189],{},[68,182,183],{},[71,184,185],{"code":185},"torch.linspace(start, end, steps)",[68,187,188],{},"创建一个在指定范围内等间隔的序列张量。",[68,190,191],{},[71,192,193],{"code":193},"x = torch.linspace(0, 1, 5)",[43,195,196,201,204],{},[68,197,198],{},[71,199,200],{"code":200},"torch.eye(size)",[68,202,203],{},"创建一个单位矩阵（对角线为 1，其他为 0）。",[68,205,206],{},[71,207,208],{"code":208},"x = torch.eye(3)",[43,210,211,216,219],{},[68,212,213],{},[71,214,215],{"code":215},"torch.from_numpy(ndarray)",[68,217,218],{},"将 NumPy 数组转换为张量。",[68,220,221],{},[71,222,223],{"code":223},"x = torch.from_numpy(np.array([1, 2, 3]))",[15,225,226],{},"使用 torch.tensor() 函数，你可以将一个列表或数组转换为张量：",[10,228,229],{"id":229},"实例",[15,231,232],{},"import torch",[15,234,235,236,239],{},"tensor = torch.tensor([1, 2, 3])",[237,238],"br",{},"\nprint(tensor)",[15,241,242],{},"输出如下：",[15,244,245,246,250],{},"tensor(",[247,248,249],"span",{},"1, 2, 3",")",[15,252,253],{},"如果你有一个 NumPy 数组，可以使用 torch.from_numpy() 将其转换为张量：",[15,255,256],{},"print(\"Shape:\", tensor_2d.shape) # 形",[28,258],{},[10,260,261],{"id":261},"张量的属性",[15,263,264],{},"张量的属性如下表：",[37,266,267,285],{},[40,268,269],{},[43,270,271,276,280],{},[46,272,273],{},[49,274,275],{},"属性",[46,277,278],{},[49,279,56],{},[46,281,282],{},[49,283,284],{},"示例",[63,286,287,302,316,331,346,361,376,391,406,421,436],{},[43,288,289,294,297],{},[68,290,291],{},[71,292,293],{"code":293},".shape",[68,295,296],{},"获取张量的形状",[68,298,299],{},[71,300,301],{"code":301},"tensor.shape",[43,303,304,309,311],{},[68,305,306],{},[71,307,308],{"code":308},".size()",[68,310,296],{},[68,312,313],{},[71,314,315],{"code":315},"tensor.size()",[43,317,318,323,326],{},[68,319,320],{},[71,321,322],{"code":322},".dtype",[68,324,325],{},"获取张量的数据类型",[68,327,328],{},[71,329,330],{"code":330},"tensor.dtype",[43,332,333,338,341],{},[68,334,335],{},[71,336,337],{"code":337},".device",[68,339,340],{},"查看张量所在的设备 (CPU\u002FGPU)",[68,342,343],{},[71,344,345],{"code":345},"tensor.device",[43,347,348,353,356],{},[68,349,350],{},[71,351,352],{"code":352},".dim()",[68,354,355],{},"获取张量的维度数",[68,357,358],{},[71,359,360],{"code":360},"tensor.dim()",[43,362,363,368,371],{},[68,364,365],{},[71,366,367],{"code":367},".requires_grad",[68,369,370],{},"是否启用梯度计算",[68,372,373],{},[71,374,375],{"code":375},"tensor.requires_grad",[43,377,378,383,386],{},[68,379,380],{},[71,381,382],{"code":382},".numel()",[68,384,385],{},"获取张量中的元素总数",[68,387,388],{},[71,389,390],{"code":390},"tensor.numel()",[43,392,393,398,401],{},[68,394,395],{},[71,396,397],{"code":397},".is_cuda",[68,399,400],{},"检查张量是否在 GPU 上",[68,402,403],{},[71,404,405],{"code":405},"tensor.is_cuda",[43,407,408,413,416],{},[68,409,410],{},[71,411,412],{"code":412},".T",[68,414,415],{},"获取张量的转置（适用于 2D 张量）",[68,417,418],{},[71,419,420],{"code":420},"tensor.T",[43,422,423,428,431],{},[68,424,425],{},[71,426,427],{"code":427},".item()",[68,429,430],{},"获取单元素张量的值",[68,432,433],{},[71,434,435],{"code":435},"tensor.item()",[43,437,438,443,446],{},[68,439,440],{},[71,441,442],{"code":442},".is_contiguous()",[68,444,445],{},"检查张量是否连续存储",[68,447,448],{},[71,449,450],{"code":450},"tensor.is_contiguous()",[28,452],{},[10,454,455],{"id":455},"张量的操作",[457,458,460],"h4",{"id":459},"基础操作","基础操作：",[37,462,463,480],{},[40,464,465],{},[43,466,467,472,476],{},[46,468,469],{},[49,470,471],{},"操作",[46,473,474],{},[49,475,56],{},[46,477,478],{},[49,479,61],{},[63,481,482,507,522,537,552,567,582,597,612],{},[43,483,484,499,502],{},[68,485,486,489,490,489,493,489,496],{},[71,487,488],{"code":488},"+",", ",[71,491,492],{"code":492},"-",[71,494,495],{"code":495},"*",[71,497,498],{"code":498},"\u002F",[68,500,501],{},"元素级加法、减法、乘法、除法。",[68,503,504],{},[71,505,506],{"code":506},"z = x + y",[43,508,509,514,517],{},[68,510,511],{},[71,512,513],{"code":513},"torch.matmul(x, y)",[68,515,516],{},"矩阵乘法。",[68,518,519],{},[71,520,521],{"code":521},"z = torch.matmul(x, y)",[43,523,524,529,532],{},[68,525,526],{},[71,527,528],{"code":528},"torch.dot(x, y)",[68,530,531],{},"向量点积（仅适用于 1D 张量）。",[68,533,534],{},[71,535,536],{"code":536},"z = torch.dot(x, y)",[43,538,539,544,547],{},[68,540,541],{},[71,542,543],{"code":543},"torch.sum(x)",[68,545,546],{},"求和。",[68,548,549],{},[71,550,551],{"code":551},"z = torch.sum(x)",[43,553,554,559,562],{},[68,555,556],{},[71,557,558],{"code":558},"torch.mean(x)",[68,560,561],{},"求均值。",[68,563,564],{},[71,565,566],{"code":566},"z = torch.mean(x)",[43,568,569,574,577],{},[68,570,571],{},[71,572,573],{"code":573},"torch.max(x)",[68,575,576],{},"求最大值。",[68,578,579],{},[71,580,581],{"code":581},"z = torch.max(x)",[43,583,584,589,592],{},[68,585,586],{},[71,587,588],{"code":588},"torch.min(x)",[68,590,591],{},"求最小值。",[68,593,594],{},[71,595,596],{"code":596},"z = torch.min(x)",[43,598,599,604,607],{},[68,600,601],{},[71,602,603],{"code":603},"torch.argmax(x, dim)",[68,605,606],{},"返回最大值的索引（指定维度）。",[68,608,609],{},[71,610,611],{"code":611},"z = torch.argmax(x, dim=1)",[43,613,614,619,622],{},[68,615,616],{},[71,617,618],{"code":618},"torch.softmax(x, dim)",[68,620,621],{},"计算 softmax（指定维度）。",[68,623,624],{},[71,625,626],{"code":626},"z = torch.softmax(x, dim=1)",[457,628,629],{"id":629},"形状操作",[37,631,632,648],{},[40,633,634],{},[43,635,636,640,644],{},[46,637,638],{},[49,639,471],{},[46,641,642],{},[49,643,56],{},[46,645,646],{},[49,647,61],{},[63,649,650,665,684,699,714,729],{},[43,651,652,657,660],{},[68,653,654],{},[71,655,656],{"code":656},"x.view(shape)",[68,658,659],{},"改变张量的形状（不改变数据）。",[68,661,662],{},[71,663,664],{"code":664},"z = x.view(3, 4)",[43,666,667,672,679],{},[68,668,669],{},[71,670,671],{"code":671},"x.reshape(shape)",[68,673,674,675,678],{},"类似于 ",[71,676,677],{"code":677},"view"," ，但更灵活。",[68,680,681],{},[71,682,683],{"code":683},"z = x.reshape(3, 4)",[43,685,686,691,694],{},[68,687,688],{},[71,689,690],{"code":690},"x.t()",[68,692,693],{},"转置矩阵。",[68,695,696],{},[71,697,698],{"code":698},"z = x.t()",[43,700,701,706,709],{},[68,702,703],{},[71,704,705],{"code":705},"x.unsqueeze(dim)",[68,707,708],{},"在指定维度添加一个维度。",[68,710,711],{},[71,712,713],{"code":713},"z = x.unsqueeze(0)",[43,715,716,721,724],{},[68,717,718],{},[71,719,720],{"code":720},"x.squeeze(dim)",[68,722,723],{},"去掉指定维度为 1 的维度。",[68,725,726],{},[71,727,728],{"code":728},"z = x.squeeze(0)",[43,730,731,736,739],{},[68,732,733],{},[71,734,735],{"code":735},"torch.cat((x, y), dim)",[68,737,738],{},"按指定维度连接多个张量。",[68,740,741],{},[71,742,743],{"code":743},"z = torch.cat((x, y), dim=1)",[28,745],{},[10,747,749],{"id":748},"张量的-gpu-加速","张量的 GPU 加速",[15,751,752],{},"将张量转移到 GPU：",[754,755,760],"pre",{"className":756,"code":758,"language":759},[757],"language-text","device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\nx = torch.tensor([1.0, 2.0, 3.0], device=device)\n","text",[71,761,758],{"__ignoreMap":762},"",[15,764,765],{},"检查 GPU 是否可用：",[754,767,770],{"className":768,"code":769,"language":759},[757],"torch.cuda.is_available()  # 返回 True 或 False\n",[71,771,769],{"__ignoreMap":762},[28,773],{},[10,775,777],{"id":776},"张量与-numpy-的互操作","张量与 NumPy 的互操作",[15,779,780],{},"张量与 NumPy 的互操作如下表所示：",[37,782,783,800],{},[40,784,785],{},[43,786,787,791,795],{},[46,788,789],{},[49,790,471],{},[46,792,793],{},[49,794,56],{},[46,796,798],{"align":797},"center",[49,799,61],{},[63,801,802,815],{},[43,803,804,808,810],{},[68,805,806],{},[71,807,215],{"code":215},[68,809,218],{},[68,811,812],{"align":797},[71,813,814],{"code":814},"x = torch.from_numpy(np_array)",[43,816,817,822,825],{},[68,818,819],{},[71,820,821],{"code":821},"x.numpy()",[68,823,824],{},"将张量转换为 NumPy 数组（仅限 CPU 张量）。",[68,826,827],{"align":797},"np_array = x.numpy()",{"title":762,"searchDepth":829,"depth":829,"links":830},4,[831,833,834,835,836,840,841],{"id":12,"depth":832,"text":13},2,{"id":32,"depth":832,"text":32},{"id":229,"depth":832,"text":229},{"id":261,"depth":832,"text":261},{"id":455,"depth":832,"text":455,"children":837},[838,839],{"id":459,"depth":829,"text":460},{"id":629,"depth":829,"text":629},{"id":748,"depth":832,"text":749},{"id":776,"depth":832,"text":777},[843],"AI","2026-08-05","PyTorch 张量与基础用法笔记。",false,"md",null,{"slots":850},{},true,"\u002Fpytorch",{"text":854,"minutes":855,"time":856,"words":857},"4 min read",3.495,209700,699,{"title":5,"description":845},{"loc":852},"posts\u002F2026\u002Fpytorch",[862,843,863],"PyTorch","Notes","tech","xXZ6xYzC2tnnXyoN8Qrp4TCOovDFTJMb96OMus43K9g",[867,872],{"title":868,"path":869,"stem":870,"date":871,"type":864,"children":-1},"渗透测试 · 信息收集","\u002F渗透测试-信息收集","posts\u002F2026\u002F渗透测试-信息收集","2026-07-26",{"title":873,"path":874,"stem":875,"date":844,"type":864,"children":-1},"WebGoat 2025.3 通关教程","\u002Fwebgoat-2025-3-通关教程","posts\u002F2026\u002Fwebgoat-2025-3-通关教程",1786294717517]