├── .gitignore ├── README.md ├── ch01_回归问题 ├── __pycache__ │ └── utils.cpython-35.pyc ├── data.csv ├── mnist_train.py ├── regression.py └── utils.py ├── ch02_PyTorch基础教程 ├── .ipynb_checkpoints │ └── Ch02_PyTorch基础教程-checkpoint.ipynb └── Ch02_PyTorch基础教程.ipynb ├── ch03_PyTorch进阶教程 ├── .ipynb_checkpoints │ └── ch03_PyTorch进阶教程-checkpoint.ipynb └── ch03_PyTorch进阶教程.ipynb ├── ch04_随机梯度下降 ├── .ipynb_checkpoints │ └── ch04_随机梯度下降-checkpoint.ipynb └── ch04_随机梯度下降.ipynb ├── ch05_ 神经网络与全连接层 ├── .idea │ ├── ch05_ 神经网络与全联接层.iml │ ├── misc.xml │ ├── modules.xml │ └── workspace.xml ├── .ipynb_checkpoints │ └── ch05_神经网络与全连接层-checkpoint.ipynb ├── ch05_神经网络与全连接层.ipynb └── mnist.py ├── ch06_过拟合与欠拟合_交叉验证_正则化 ├── .ipynb_checkpoints │ ├── ch06_ 正则化_动量与学习率衰减_早停_dropout-checkpoint.ipynb │ └── ch06_过拟合与欠拟合-checkpoint.ipynb ├── ch06_ 正则化_动量与学习率衰减_早停_dropout.ipynb └── ch06_过拟合与欠拟合.ipynb ├── ch07_卷积神经网络CNN ├── .ipynb_checkpoints │ ├── ch07_卷积神经网络基础-checkpoint.ipynb │ └── ch07_经典卷积网络-checkpoint.ipynb ├── ch07_卷积神经网络基础.ipynb └── ch07_经典卷积网络.ipynb ├── ch08_CIFAR10_ResNet ├── .idea │ ├── ch08_CIFAR10_ResNet.iml │ ├── copyright │ │ └── profiles_settings.xml │ ├── dictionaries │ │ └── mac.xml │ ├── inspectionProfiles │ │ └── Project_Default.xml │ ├── misc.xml │ ├── modules.xml │ ├── vcs.xml │ └── workspace.xml ├── LeNet5.py ├── ResNet.py ├── __pycache__ │ ├── LeNet5.cpython-35.pyc │ ├── LeNet5.cpython-37.pyc │ ├── ResNet.cpython-35.pyc │ └── ResNet.cpython-37.pyc └── main.py ├── ch09_循环神经网络RNN&LSTM ├── .ipynb_checkpoints │ └── ch09_RNN-checkpoint.ipynb └── ch09_RNN.ipynb ├── ch10_迁移学习-实战宝可梦精灵 ├── .idea │ ├── ch10_迁移学习-实战宝可梦精灵.iml │ ├── dictionaries │ │ └── szz.xml │ ├── inspectionProfiles │ │ └── Project_Default.xml │ ├── misc.xml │ ├── modules.xml │ ├── vcs.xml │ └── workspace.xml ├── .ipynb_checkpoints │ └── ch10_迁移学习-实战宝可梦精灵-checkpoint.ipynb ├── __pycache__ │ ├── pokemon.cpython-35.pyc │ ├── pokemon.cpython-37.pyc │ ├── resnet.cpython-35.pyc │ ├── resnet.cpython-37.pyc │ └── utils.cpython-37.pyc ├── best.mdl ├── best_for_scratch.mdl ├── best_for_transfer.mdl ├── ch10_迁移学习-实战宝可梦精灵.ipynb ├── pokemon.py ├── pokemon_useAPI.py ├── resnet.py ├── train_scratch.py ├── train_transfer.py └── utils.py └── ch11_自编码器 Auto-Encoders ├── .idea └── ch11_自编码器 Auto-Encoders.iml ├── .ipynb_checkpoints └── 11 - Auto-Encoders-checkpoint.ipynb ├── 11 - Auto-Encoders.ipynb ├── ae.py ├── ae_train.py ├── vae.py └── vae_train.py /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | data/ 3 | .idea 4 | picture -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PyTorch-Course-Note 2 | 3 | 数据集过大,上传到了百度云 链接: https://pan.baidu.com/s/1YGJ-SR1XMp-TLB-mZryqzA 密码: t2i0 解压后放到目录下即可 4 | 5 | #### win10运行问题解决办法: 6 | 找到 tornado/platform/asyncio.py 文件修改,添加代码如下: 7 | 8 | ```python 9 | if sys.platform == 'win32': 10 | asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) 11 | 12 | 13 | ``` 14 | 15 | 16 | 17 | ### visdom安装 18 | 19 | - git clone git@github.com:facebookresearch/visdom.git 20 | - cd visdom/ 21 | - pip install -e . -------------------------------------------------------------------------------- /ch01_回归问题/__pycache__/utils.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhuozhudd/PyTorch-Course-Note/152d79dc9c6b662f9461bcb06a8afc82dde726f4/ch01_回归问题/__pycache__/utils.cpython-35.pyc -------------------------------------------------------------------------------- /ch01_回归问题/data.csv: -------------------------------------------------------------------------------- 1 | 1.441420763439877906e-01,3.008888522256620845e-01 2 | 7.561157580978923320e-01,1.200490164403901661e+00 3 | 7.580154722681392565e-01,1.203282744234164703e+00 4 | 5.627146030856732262e-01,9.161904665359396072e-01 5 | 1.726740286659089740e-01,3.428308221388861599e-01 6 | 5.950836133900827551e-02,1.764772911683421541e-01 7 | 8.277337446696210188e-01,1.305768604664342858e+00 8 | 7.109868071758078667e-01,1.134150606548437468e+00 9 | 3.048718874921082511e-01,5.371616746133991427e-01 10 | 7.388525634014426746e-01,1.175113268200120631e+00 11 | 9.590565411252628403e-01,1.498813115454136424e+00 12 | 8.015464815428295919e-01,1.267273327867959543e+00 13 | 9.607216520486532296e-01,1.501260828511520096e+00 14 | 8.445593908547965878e-01,1.330502304556550941e+00 15 | 4.506229754402359955e-01,7.514157738971468659e-01 16 | 5.868013230637029176e-01,9.515979449036432447e-01 17 | 8.007795198203720988e-01,1.266145894135946914e+00 18 | 5.035736175865878073e-01,8.292532178522840081e-01 19 | 3.114433926995394675e-01,5.468217872683229785e-01 20 | 7.317475377906073053e-01,1.164668880552192753e+00 21 | 6.139734681610302669e-01,9.915409981967144848e-01 22 | 9.945943755290296284e-01,1.551053732027673604e+00 23 | 7.055574630060129637e-01,1.126169470618838986e+00 24 | 4.476654249698448496e-01,7.470681747056718836e-01 25 | 3.567608208560109073e-01,6.134384066583360440e-01 26 | 6.127574022587565228e-01,9.897533813203720499e-01 27 | 4.935134303804317168e-01,8.144647426592346307e-01 28 | 5.063936386469451989e-01,8.333986488110094459e-01 29 | 9.955887026058044542e-01,1.552515392830532415e+00 30 | 9.632136367376882280e-01,1.504924046004401550e+00 31 | 6.496371483048046791e-02,1.844966608008062892e-01 32 | 4.475809770427596757e-02,1.547944036252856814e-01 33 | 6.465951788450118309e-01,1.039494912902167334e+00 34 | 7.316031926765320659e-02,1.965456693234501895e-01 35 | 7.349758904863741282e-01,1.169414559014969823e+00 36 | 5.473148503498541650e-01,8.935528300142855374e-01 37 | 9.047874438231638949e-01,1.419037542420050979e+00 38 | 8.826579421734687125e-01,1.386507174994998870e+00 39 | 7.796753704162312504e-01,1.235122794511859912e+00 40 | 2.011678690952142246e-01,3.847167675699648681e-01 41 | 7.932643186640753186e-01,1.255098548436190731e+00 42 | 5.118798669658771727e-01,8.414634044398393575e-01 43 | 6.566237722921854925e-01,1.054236945269512615e+00 44 | 6.285757760027370633e-01,1.013006390724023431e+00 45 | 7.378221359980340344e-01,1.173598539917110051e+00 46 | 3.792372434380724133e-01,6.464787478539664178e-01 47 | 3.034149812555956283e-01,5.350200224457255516e-01 48 | 8.569840082393150871e-01,1.348766492111793225e+00 49 | 8.075549610214690643e-01,1.276105792701559549e+00 50 | 5.418174404078206496e-01,8.854716373994963030e-01 51 | 4.181387641509373143e-01,7.036639833018778489e-01 52 | 1.187503349960870036e-01,2.635629924442478567e-01 53 | 4.866363992436300023e-01,8.043555068881360626e-01 54 | 6.740491840830054038e-02,1.880852300602017801e-01 55 | 4.835415882449580760e-01,7.998061347200883242e-01 56 | 7.849257718903341896e-01,1.242840884678791280e+00 57 | 2.025011429949694630e-01,3.866766802026051497e-01 58 | 1.911139930912145735e-01,3.699375698440854343e-01 59 | 6.063343956409872337e-02,1.781311561592251180e-01 60 | 3.982912368283442195e-01,6.744881181376659596e-01 61 | 8.872173439482450297e-01,1.393209495603920045e+00 62 | 6.681647796307321752e-02,1.872202226057176344e-01 63 | 2.110109857307218562e-01,3.991861490241611632e-01 64 | 9.907919996833827181e-01,1.545464239534572570e+00 65 | 2.122751536898482838e-01,4.010444759240769930e-01 66 | 9.028160514122285374e-01,1.416139595575975907e+00 67 | 2.073147375222623712e-01,3.937526641577256958e-01 68 | 9.471496306862211556e-01,1.481309957108745134e+00 69 | 8.771565861607195647e-01,1.378420181656257792e+00 70 | 8.415160805050864168e-01,1.326028638342477084e+00 71 | 6.329076436268699091e-02,1.820374236131498680e-01 72 | 3.679429819099352406e-01,6.298761834076047617e-01 73 | 2.943252270555074546e-02,1.322658083771595938e-01 74 | 5.313441724475661543e-01,8.700759334979222270e-01 75 | 7.987263239825815875e-01,1.263127696254394916e+00 76 | 6.253441188173707310e-01,1.008255854661535000e+00 77 | 9.085903342154009188e-01,1.424627791296639190e+00 78 | 6.042450641984775661e-01,9.772402443717619347e-01 79 | 6.900507380291087678e-02,1.904374584902789880e-01 80 | 5.092845860973660432e-02,1.638648341563128108e-01 81 | 4.754453572983440290e-01,7.879046752285656652e-01 82 | 2.972494436682412422e-01,5.259566821923146174e-01 83 | 4.139305962028716479e-02,1.498477976418221280e-01 84 | 7.354242451491166399e-01,1.170073640369201362e+00 85 | 7.905121638074625867e-01,1.251052880796969857e+00 86 | 7.819970069136303881e-01,1.238535600163036543e+00 87 | 8.901316864032422504e-01,1.397493579012766052e+00 88 | 4.178082113223988703e-01,7.031780706439263451e-01 89 | 5.668677629854733668e-01,9.222956115886458139e-01 90 | 7.630679646999156684e-01,1.210709908108875910e+00 91 | 7.246042988740617474e-01,1.154168319344870630e+00 92 | 6.951329247627034968e-01,1.110845399401173994e+00 93 | 2.644843144593916895e-01,4.777919422553057460e-01 94 | 8.176013249640490255e-01,1.290873947697152024e+00 95 | 4.364077411936698736e-01,7.305193795546947033e-01 96 | 5.108615819094332045e-01,8.399665254068667819e-01 97 | 5.438108309427717169e-01,8.884019214858743796e-01 98 | 2.078786821515706817e-01,3.945816627628089268e-01 99 | 2.571302167923578130e-01,4.669814186847659476e-01 100 | 7.091536129762591179e-01,1.131455811075100959e+00 101 | -------------------------------------------------------------------------------- /ch01_回归问题/mnist_train.py: -------------------------------------------------------------------------------- 1 | import torch 2 | from torch import nn 3 | from torch.nn import functional as F 4 | from torch import optim 5 | 6 | import torchvision 7 | import matplotlib.pyplot as plt 8 | from utils import plot_image, plot_curve, ont_hot 9 | 10 | # step1. load dataset 11 | 12 | batch_size = 64 13 | train_load = torch.utils.data.DataLoader(torchvision.datasets.MNIST( 14 | 'mnist data', 15 | train=True, 16 | download=True, 17 | transform=torchvision.transforms.Compose([ 18 | torchvision.transforms.ToTensor(), 19 | torchvision.transforms.Normalize((0.1307, ), (0.3081, )) 20 | ])), 21 | batch_size=batch_size, 22 | shuffle=True) 23 | 24 | test_load = torch.utils.data.DataLoader(torchvision.datasets.MNIST( 25 | 'mnist data/', 26 | train=False, 27 | download=True, 28 | transform=torchvision.transforms.Compose([ 29 | torchvision.transforms.ToTensor(), 30 | torchvision.transforms.Normalize((0.1307, ), (0.3081, )) 31 | ])), 32 | batch_size=batch_size, 33 | shuffle=False) 34 | 35 | x, y = next(iter(train_load)) 36 | print(x.shape, y.shape) 37 | print(x.min(), x.max()) 38 | plot_image(x, y, 'image_sample') 39 | 40 | 41 | class Net(nn.Module): 42 | def __init__(self): 43 | super(Net, self).__init__() 44 | 45 | # xw+b 46 | self.fc1 = nn.Linear(28 * 28, 256) 47 | self.fc2 = nn.Linear(256, 64) 48 | self.fc3 = nn.Linear(64, 10) 49 | 50 | def forward(self, x): 51 | # x: [b,1,28,28] 52 | x = F.relu(self.fc1(x)) 53 | x = F.relu(self.fc2(x)) 54 | # x = F.softmax(self.fc3(x)) 55 | x = self.fc3(x) # h3 = h2w3 + b3 56 | return x 57 | 58 | 59 | net = Net() 60 | # net.parameters: [w1,b1,w2,b2,w3,b3] 61 | optimizer = optim.SGD(net.parameters(), lr=0.01, momentum=0.9) 62 | 63 | train_loss = [] 64 | 65 | for epoch in range(3): 66 | for batch_idx, (x, y) in enumerate(train_load): 67 | # x:[b,1,28,28] , y:[64] 68 | # net只接收[b,feature] 需要 [b,1,28,28] -> [b,feature] 69 | x = x.view(x.size(0), -1) 70 | out = net(x) # -> [b,10] 71 | # [b,10] 72 | y_onehot = ont_hot(y) 73 | # loss = mse(out,y_onehot) 74 | loss = F.mse_loss(out, y_onehot) 75 | 76 | optimizer.zero_grad() 77 | loss.backward() 78 | optimizer.step() # w' = w - lr * grad 79 | train_loss.append(loss.item()) 80 | if batch_idx % 10 == 0: 81 | print(epoch, batch_idx, loss.item()) 82 | 83 | plot_curve(train_loss) 84 | # we get optimal [w1,b1,w2,b2,w3,b3] 85 | 86 | total_correct = 0 87 | for x, y in test_load: 88 | x = x.view(x.size(0), -1) 89 | out = net(x) 90 | # out:[b,10] -> predict_value:[b] 91 | predict_value = out.argmax(dim=1) 92 | correct = predict_value.eq( 93 | y).sum().float().item() # 正确个数,转为float类型,转为python数值类型 94 | total_correct += correct 95 | 96 | total_num = len(test_load.dataset) 97 | acc = total_correct / total_num 98 | print('test acc:', acc) 99 | 100 | x, y = next(iter(test_load)) 101 | out = net(x.view(x.size(0), -1)) 102 | pred = out.argmax(dim=1) 103 | plot_image(x, pred, 'test') 104 | -------------------------------------------------------------------------------- /ch01_回归问题/regression.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | 3 | 4 | def compute_error_for_line_given_points(b, w, points): 5 | totalError = 0 6 | for i in range(0, len(points)): 7 | x = points[i, 0] 8 | y = points[i, 1] 9 | totalError += (y - (w * x + b))**2 10 | return totalError / float(len(points)) 11 | 12 | 13 | def step_gradient(b_current, w_current, points, learningRate): 14 | b_gradient = 0 15 | w_gradient = 0 16 | N = float(len(points)) 17 | for i in range(0, len(points)): 18 | x = points[i, 0] 19 | y = points[i, 1] 20 | b_gradient += (2 / N) * (((w_current * x) + b_current) - y) 21 | w_gradient += (2 / N) * x * (((w_current * x) + b_current) - y) 22 | 23 | new_b = b_current - (learningRate * b_gradient) 24 | new_w = w_current - (learningRate * w_gradient) 25 | return new_b, new_w 26 | 27 | 28 | def gradient_descent_runner(points, starting_b, starting_w, learning_rate, 29 | num_iterations): 30 | b = starting_b 31 | w = starting_w 32 | for i in range(num_iterations): 33 | b, w = step_gradient(b, w, np.array(points), learning_rate) 34 | return [b, w] 35 | 36 | 37 | def generate_data_csv(): 38 | data_x = np.random.rand(100) 39 | data_y = 1.47 * data_x + 0.089 40 | points = np.stack((data_x, data_y), axis=1) 41 | np.savetxt('eat_pyTorch/ch01_回归问题/data.csv', points, delimiter=',') 42 | 43 | 44 | def run(): 45 | generate_data_csv() 46 | points = np.genfromtxt("eat_pyTorch/ch01_回归问题/data.csv", delimiter=',') 47 | learning_rate = 0.005 48 | initial_b = 0 49 | initial_w = 0 50 | num_iterations = 10000 51 | print( 52 | "Starting gradient descent at b = {0} , w = {1} , error = {2} ".format( 53 | initial_b, initial_w, 54 | compute_error_for_line_given_points(initial_b, initial_w, points))) 55 | print("Running ...") 56 | [b, w] = gradient_descent_runner(points, initial_b, initial_w, 57 | learning_rate, num_iterations) 58 | print("After {0} iterations b = {1}, w = {2}, error = {3}".format( 59 | num_iterations, b, w, 60 | compute_error_for_line_given_points(b, w, points))) 61 | 62 | print('b:{},w:{}'.format(b, w)) 63 | 64 | 65 | if __name__ == '__main__': 66 | run() -------------------------------------------------------------------------------- /ch01_回归问题/utils.py: -------------------------------------------------------------------------------- 1 | import torch 2 | from matplotlib import pyplot as plt 3 | 4 | 5 | def plot_curve(data): 6 | fig = plt.figure() 7 | plt.plot(range(len(data)), data, color='blue') 8 | plt.legend(['value'], loc='upper right') 9 | plt.xlabel('step') 10 | plt.ylabel('value') 11 | plt.show() 12 | 13 | 14 | def plot_image(img, label, name): 15 | fig = plt.figure() 16 | for i in range(6): 17 | plt.subplot(2, 3, i + 1) 18 | plt.tight_layout() 19 | plt.imshow(img[i][0] * 0.3081 + 0.1307, 20 | cmap='gray', 21 | interpolation='none') 22 | plt.title("{} : {}".format(name, label[i].item())) 23 | plt.xticks([]) 24 | plt.yticks([]) 25 | plt.show() 26 | 27 | 28 | def ont_hot(label, depth=10): 29 | out = torch.zeros(label.size(0), depth) 30 | idx = torch.LongTensor(label).view(-1, 1) 31 | out.scatter_(dim=1, index=idx, value=1) 32 | return out -------------------------------------------------------------------------------- /ch02_PyTorch基础教程/.ipynb_checkpoints/Ch02_PyTorch基础教程-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Ch02 PyTorch基础教程" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "## 2.1 张量数据类型" 15 | ] 16 | }, 17 | { 18 | "cell_type": "code", 19 | "execution_count": 16, 20 | "metadata": {}, 21 | "outputs": [], 22 | "source": [ 23 | "import torch\n", 24 | "import numpy as np" 25 | ] 26 | }, 27 | { 28 | "cell_type": "code", 29 | "execution_count": 8, 30 | "metadata": {}, 31 | "outputs": [ 32 | { 33 | "name": "stdout", 34 | "output_type": "stream", 35 | "text": [ 36 | "torch.FloatTensor\n", 37 | "\n" 38 | ] 39 | }, 40 | { 41 | "data": { 42 | "text/plain": [ 43 | "True" 44 | ] 45 | }, 46 | "execution_count": 8, 47 | "metadata": {}, 48 | "output_type": "execute_result" 49 | } 50 | ], 51 | "source": [ 52 | "a = torch.randn(2,3)\n", 53 | "print(a.type())\n", 54 | "print(type(a))\n", 55 | "isinstance(a,torch.FloatTensor)" 56 | ] 57 | }, 58 | { 59 | "cell_type": "markdown", 60 | "metadata": {}, 61 | "source": [ 62 | "### Note1: 类型推断\n", 63 | "- tensor_name.type()\n", 64 | "- isinstance(torsor_name,type_name)" 65 | ] 66 | }, 67 | { 68 | "cell_type": "code", 69 | "execution_count": 12, 70 | "metadata": {}, 71 | "outputs": [ 72 | { 73 | "name": "stdout", 74 | "output_type": "stream", 75 | "text": [ 76 | "tensor(1.) torch.Size([]) 0 0\n" 77 | ] 78 | } 79 | ], 80 | "source": [ 81 | "# 标量 ,dim=0\n", 82 | "a = torch.tensor(1.)\n", 83 | "print(a,a.shape,len(a.shape),a.dim())" 84 | ] 85 | }, 86 | { 87 | "cell_type": "markdown", 88 | "metadata": {}, 89 | "source": [ 90 | "### Note2: dim=0 标量\n", 91 | "- a.shape 成员\n", 92 | "- a.size() 成员函数\n", 93 | "- a.dim() 维度" 94 | ] 95 | }, 96 | { 97 | "cell_type": "code", 98 | "execution_count": 18, 99 | "metadata": {}, 100 | "outputs": [ 101 | { 102 | "name": "stdout", 103 | "output_type": "stream", 104 | "text": [ 105 | "tensor([1.1000, 2.2000]) torch.Size([2]) torch.FloatTensor\n", 106 | "tensor([8.4078e-45, 0.0000e+00]) torch.Size([2]) torch.FloatTensor\n", 107 | "tensor([1., 1.], dtype=torch.float64) torch.Size([2]) torch.DoubleTensor\n" 108 | ] 109 | } 110 | ], 111 | "source": [ 112 | "# 向量,dim=1\n", 113 | "a = torch.tensor([1.1,2.2])\n", 114 | "print(a,a.shape,a.type())\n", 115 | "\n", 116 | "b = torch.FloatTensor(2)\n", 117 | "print(b,b.shape,b.type())\n", 118 | "\n", 119 | "data = np.ones(2)\n", 120 | "c = torch.from_numpy(data)\n", 121 | "print(c,c.shape,c.type())" 122 | ] 123 | }, 124 | { 125 | "cell_type": "markdown", 126 | "metadata": {}, 127 | "source": [ 128 | "### Note3: dim=1 向量\n", 129 | "- .tensor接受的是数据的内容\n", 130 | "- .FloatTensor接受的是数据的shape,随机初始化\n", 131 | "- .from_numpy() numpy -> torch.tensor\n", 132 | "- dim=0 -> 0.1\n", 133 | "- dim=1 -> [0.1]\n" 134 | ] 135 | }, 136 | { 137 | "cell_type": "code", 138 | "execution_count": 26, 139 | "metadata": {}, 140 | "outputs": [ 141 | { 142 | "name": "stdout", 143 | "output_type": "stream", 144 | "text": [ 145 | "tensor([[-0.6025, -0.0328, -1.7973],\n", 146 | " [ 0.5828, 0.6371, -0.0266]])\n", 147 | "torch.Size([2, 3]) 2 3\n", 148 | "用shape索引: 2 3\n" 149 | ] 150 | } 151 | ], 152 | "source": [ 153 | "a = torch.randn(2,3) # normal distribution 正态分布\n", 154 | "# a = torch.FloatTensor(2,3)\n", 155 | "print(a)\n", 156 | "print(a.shape,' ',a.size(0),' ',a.size(1))\n", 157 | "print('用shape索引: ',a.shape[0],' ',a.shape[1])" 158 | ] 159 | }, 160 | { 161 | "cell_type": "code", 162 | "execution_count": 33, 163 | "metadata": {}, 164 | "outputs": [ 165 | { 166 | "data": { 167 | "text/plain": [ 168 | "tensor([[[0.9681, 0.9093, 0.3873],\n", 169 | " [0.2986, 0.7554, 0.5381]]])" 170 | ] 171 | }, 172 | "metadata": {}, 173 | "output_type": "display_data" 174 | }, 175 | { 176 | "name": "stdout", 177 | "output_type": "stream", 178 | "text": [ 179 | "torch.Size([1, 2, 3]) torch.Size([1, 2, 3])\n", 180 | "a的内存大小为:1x2x3 = 6\n", 181 | "3 3\n" 182 | ] 183 | } 184 | ], 185 | "source": [ 186 | "a = torch.rand(1,2,3) # 均匀分布[0,1] uniform distribution\n", 187 | "display(a)\n", 188 | "print(a.shape,' ',a.size())\n", 189 | "list(a.shape)\n", 190 | "print('a的内存大小为:1x2x3 = ',a.numel())\n", 191 | "print(len(a.shape),a.dim())" 192 | ] 193 | }, 194 | { 195 | "cell_type": "markdown", 196 | "metadata": {}, 197 | "source": [ 198 | "### Note4: dim=3的张量\n", 199 | "- rand 均匀分布[0,1]\n", 200 | "- randn 正态分布[0,1]\n", 201 | "- 为了和python交互,使用list将shape转换为list类型\n", 202 | "- 用.numel()方法得到tensor的大小\n", 203 | "- 用len(a.shape)和a.dim()都可得到tensor的维度\n", 204 | "- 三维张量在RNN经常使用,四维张量在CNN中经常使用,用来表示图片" 205 | ] 206 | }, 207 | { 208 | "cell_type": "markdown", 209 | "metadata": {}, 210 | "source": [ 211 | "## 2.2 创建Tensor" 212 | ] 213 | }, 214 | { 215 | "cell_type": "code", 216 | "execution_count": 35, 217 | "metadata": {}, 218 | "outputs": [ 219 | { 220 | "data": { 221 | "text/plain": [ 222 | "tensor([2.0000, 3.3000], dtype=torch.float64)" 223 | ] 224 | }, 225 | "execution_count": 35, 226 | "metadata": {}, 227 | "output_type": "execute_result" 228 | } 229 | ], 230 | "source": [ 231 | "a_np = np.array([2,3.3])\n", 232 | "a_pt = torch.from_numpy(a_np)\n", 233 | "a_pt" 234 | ] 235 | }, 236 | { 237 | "cell_type": "code", 238 | "execution_count": 36, 239 | "metadata": {}, 240 | "outputs": [ 241 | { 242 | "data": { 243 | "text/plain": [ 244 | "tensor([2.0000, 3.2000])" 245 | ] 246 | }, 247 | "execution_count": 36, 248 | "metadata": {}, 249 | "output_type": "execute_result" 250 | } 251 | ], 252 | "source": [ 253 | "torch.tensor([2.,3.2]) # 小写给具体数据" 254 | ] 255 | }, 256 | { 257 | "cell_type": "code", 258 | "execution_count": 38, 259 | "metadata": {}, 260 | "outputs": [ 261 | { 262 | "data": { 263 | "text/plain": [ 264 | "tensor([[9.8863e+36, 4.5790e-41, 9.8866e+36],\n", 265 | " [4.5790e-41, 2.7604e+20, 1.7744e+28]])" 266 | ] 267 | }, 268 | "execution_count": 38, 269 | "metadata": {}, 270 | "output_type": "execute_result" 271 | } 272 | ], 273 | "source": [ 274 | "torch.FloatTensor(2,3) # 大写给shape\n", 275 | "# torch.FloatTensor([2.,3.2]) 少使用,易混淆" 276 | ] 277 | }, 278 | { 279 | "cell_type": "code", 280 | "execution_count": 46, 281 | "metadata": {}, 282 | "outputs": [ 283 | { 284 | "name": "stdout", 285 | "output_type": "stream", 286 | "text": [ 287 | "torch.FloatTensor\n", 288 | "torch.DoubleTensor\n" 289 | ] 290 | } 291 | ], 292 | "source": [ 293 | "# set default type\n", 294 | "print(torch.tensor([1.2,3]).type())\n", 295 | "torch.set_default_tensor_type(torch.DoubleTensor)\n", 296 | "print(torch.tensor([1.2,3]).type())" 297 | ] 298 | }, 299 | { 300 | "cell_type": "markdown", 301 | "metadata": {}, 302 | "source": [ 303 | "### Note5: tensor和FloatTensor\n", 304 | "- 小写给具体数据,大写给shape\n", 305 | "- 这种方法生成的张量不能直接使用,里面会存在无穷大和无穷小,后面必须用别的数据写入\n", 306 | "- .set_default_tensor_type()方法可以设置tensor的默认类型" 307 | ] 308 | }, 309 | { 310 | "cell_type": "code", 311 | "execution_count": 51, 312 | "metadata": {}, 313 | "outputs": [ 314 | { 315 | "name": "stdout", 316 | "output_type": "stream", 317 | "text": [ 318 | "tensor([[0.2782, 0.6091, 0.6666],\n", 319 | " [0.3973, 0.5082, 0.8371],\n", 320 | " [0.4828, 0.8271, 0.6257]])\n", 321 | "tensor([[0.2782, 0.6091, 0.6666],\n", 322 | " [0.3973, 0.5082, 0.8371],\n", 323 | " [0.4828, 0.8271, 0.6257]])\n", 324 | "tensor([[5, 4, 8],\n", 325 | " [3, 3, 2],\n", 326 | " [6, 8, 2]])\n" 327 | ] 328 | } 329 | ], 330 | "source": [ 331 | "# rand\n", 332 | "a = torch.rand(3,3)\n", 333 | "print(a)\n", 334 | "b = torch.rand_like(a)\n", 335 | "print(a)\n", 336 | "\n", 337 | "a = torch.randint(1,10,[3,3])\n", 338 | "print(a)" 339 | ] 340 | }, 341 | { 342 | "cell_type": "markdown", 343 | "metadata": {}, 344 | "source": [ 345 | "### Note6: rand/rand_like , randint\n", 346 | "- rand会均匀随机产生[0,1)之间的数据\n", 347 | "- *_like方法接收的参数是tensor\n", 348 | "- .randint(1,10,[3,3])产生[1,10)之间的均匀分布随机数,shape为[3,3]" 349 | ] 350 | }, 351 | { 352 | "cell_type": "code", 353 | "execution_count": 60, 354 | "metadata": {}, 355 | "outputs": [ 356 | { 357 | "name": "stdout", 358 | "output_type": "stream", 359 | "text": [ 360 | "tensor([[0.7122, 0.9045, 0.0039],\n", 361 | " [0.8279, 0.5099, 0.2207],\n", 362 | " [0.0466, 0.6949, 0.9866]])\n", 363 | "tensor([ 1.8412, 0.0322, 0.7769, 0.7791, 0.2126, 0.1222, -0.2154, 0.2899,\n", 364 | " 0.3680, 0.1192])\n", 365 | "\n", 366 | "\n", 367 | "\n", 368 | "想把tensor全部赋值为一个元素用full: \n", 369 | " tensor([[7., 7., 7.],\n", 370 | " [7., 7., 7.]])\n", 371 | "生成一个标量:\n", 372 | " tensor(7.)\n", 373 | "生成一个vec:\n", 374 | " tensor([7., 7.])\n", 375 | "\n", 376 | "\n", 377 | "\n" 378 | ] 379 | } 380 | ], 381 | "source": [ 382 | "# randn正太分布 N(0,1)\n", 383 | "a = torch.rand(3,3)\n", 384 | "print(a)\n", 385 | "\n", 386 | "# N(u,std)\n", 387 | "print(torch.normal(mean=torch.full([10],0),std=torch.arange(1,0,-0.1)))\n", 388 | "\n", 389 | "print('\\n\\n')\n", 390 | "\n", 391 | "# full\n", 392 | "print('想把tensor全部赋值为一个元素用full: \\n',torch.full([2,3],7))\n", 393 | "print('生成一个标量:\\n',torch.full([],7))\n", 394 | "print('生成一个vec:\\n',torch.full([2],7))\n", 395 | "\n", 396 | "print('\\n\\n')\n" 397 | ] 398 | }, 399 | { 400 | "cell_type": "markdown", 401 | "metadata": {}, 402 | "source": [ 403 | "### Note7: randn , full\n", 404 | "- randn正态分布\n", 405 | "- full将tensor全部赋值为一个元素" 406 | ] 407 | }, 408 | { 409 | "cell_type": "code", 410 | "execution_count": 64, 411 | "metadata": {}, 412 | "outputs": [ 413 | { 414 | "name": "stdout", 415 | "output_type": "stream", 416 | "text": [ 417 | "arange生成[0,10)内的等差为2的数列: \n", 418 | " tensor([0, 2, 4, 6, 8])\n", 419 | "\n", 420 | "\n" 421 | ] 422 | } 423 | ], 424 | "source": [ 425 | "# arrange/range\n", 426 | "print('arange生成[0,10)内的等差为2的数列: \\n',torch.arange(0,10,2))\n", 427 | "print('\\n')" 428 | ] 429 | }, 430 | { 431 | "cell_type": "code", 432 | "execution_count": 69, 433 | "metadata": {}, 434 | "outputs": [ 435 | { 436 | "name": "stdout", 437 | "output_type": "stream", 438 | "text": [ 439 | "linespace在[0,10]中生成4个间隔相同的数字: \n", 440 | " tensor([ 0.0000, 3.3333, 6.6667, 10.0000])\n", 441 | "logspace在[-1,0]中切割10份,设每个数为xi,生成10^xi: \n", 442 | " tensor([1.0000, 0.7743, 0.5995, 0.4642, 0.3594, 0.2783, 0.2154, 0.1668, 0.1292,\n", 443 | " 0.1000])\n" 444 | ] 445 | } 446 | ], 447 | "source": [ 448 | "# linespace/logspace\n", 449 | "print('linespace在[0,10]中生成4个间隔相同的数字: \\n',torch.linspace(0,10,steps=4))\n", 450 | "print('logspace在[-1,0]中切割10份,设每个数为xi,生成10^xi: \\n',torch.logspace(0,-1,steps=10,base=10))" 451 | ] 452 | }, 453 | { 454 | "cell_type": "markdown", 455 | "metadata": {}, 456 | "source": [ 457 | "### Note8: arange/range linespace/logspace\n", 458 | "- pytorch不建议使用range\n", 459 | "- arange的第三个参数是等差\n", 460 | "- linespace的第三个参数是等分的数量\n", 461 | "- logspace的base参数可以设置为2,10,e等底数" 462 | ] 463 | }, 464 | { 465 | "cell_type": "code", 466 | "execution_count": null, 467 | "metadata": {}, 468 | "outputs": [], 469 | "source": [] 470 | } 471 | ], 472 | "metadata": { 473 | "kernelspec": { 474 | "display_name": "Python 3.5.6 64-bit ('base': conda)", 475 | "language": "python", 476 | "name": "python35664bitbaseconda34414b764a4544e4b3502fc9f239efc6" 477 | }, 478 | "language_info": { 479 | "codemirror_mode": { 480 | "name": "ipython", 481 | "version": 3 482 | }, 483 | "file_extension": ".py", 484 | "mimetype": "text/x-python", 485 | "name": "python", 486 | "nbconvert_exporter": "python", 487 | "pygments_lexer": "ipython3", 488 | "version": "3.5.6" 489 | }, 490 | "varInspector": { 491 | "cols": { 492 | "lenName": 16, 493 | "lenType": 16, 494 | "lenVar": 40 495 | }, 496 | "kernels_config": { 497 | "python": { 498 | "delete_cmd_postfix": "", 499 | "delete_cmd_prefix": "del ", 500 | "library": "var_list.py", 501 | "varRefreshCmd": "print(var_dic_list())" 502 | }, 503 | "r": { 504 | "delete_cmd_postfix": ") ", 505 | "delete_cmd_prefix": "rm(", 506 | "library": "var_list.r", 507 | "varRefreshCmd": "cat(var_dic_list()) " 508 | } 509 | }, 510 | "types_to_exclude": [ 511 | "module", 512 | "function", 513 | "builtin_function_or_method", 514 | "instance", 515 | "_Feature" 516 | ], 517 | "window_display": false 518 | } 519 | }, 520 | "nbformat": 4, 521 | "nbformat_minor": 2 522 | } 523 | -------------------------------------------------------------------------------- /ch05_ 神经网络与全连接层/.idea/ch05_ 神经网络与全联接层.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 11 | -------------------------------------------------------------------------------- /ch05_ 神经网络与全连接层/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | -------------------------------------------------------------------------------- /ch05_ 神经网络与全连接层/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ch05_ 神经网络与全连接层/.idea/workspace.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 86 | 87 | 88 | 90 | 91 | 98 | 99 | 100 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 |