pytorch教程
文章平均质量分 59
pytorch教程
vincent_hahaha
haha ha
展开
-
稀疏矩阵之scipy
>>> # Constructing a matrix using ijv format>>> row = np.array([0, 3, 1, 0])>>> col = np.array([0, 3, 1, 2])>>> data = np.array([4, 5, 7, 9])>>> coo_matrix((data, (row, col)), shape=(4, 4)).toarray()array原创 2021-11-25 22:01:58 · 672 阅读 · 0 评论 -
Pytorch教程(十九)torch.cat与torch.stack的区别
这一节,将分析拼接(concatenating)和叠加(stacking)张量的区别。首先看三个例子,一个是pytorch,一个是TensorFlow,一个是numpy。stack和cat张量之间的区别可以用一句话描述:Concatenating joins a sequence of tensors along an existing axis, and Stacking joins a sequence of tensors along a new axis.也就是说cat是在已有的轴上进行原创 2021-12-05 18:03:15 · 1588 阅读 · 0 评论 -
creating a tensor from a list of numpy.ndarray is extremely slow Please consider converting the lis
我的代码如下node_2_neg_list = [torch.LongTensor(node) for node in node_2_negative]其中node_2_negative是一个list,里面有16个元素:每个元素又是一个list,里面与10个元素:而每个元素中又包含10个元素:所以这是一个list嵌套list的情况,而我们执行上面的代码,提示信息:creating a tensor from a list of numpy.ndarray is extremely slo原创 2021-12-04 15:26:53 · 7170 阅读 · 0 评论 -
Pytorch教程(十八)tensor的保存为csv,并加载
保存有一个tensor数据需要保存,这时训练好的一个节点embedding:我们需要把结果保存下来:刚开始使用的是:np.savetxt('./obj/model.csv',model.encode().numpy(),fmt='%.2f',delimiter=',')但是运行报错:提示说要使用tensor.detach().numpy()detach()方法的作用是从计算图中脱离出来。返回一个新的tensor,新的tensor和原来的tensor共享数据内存,但不涉及梯度计算,即req原创 2021-11-19 11:22:41 · 11313 阅读 · 2 评论 -
原创 Pytorch教程(十七):实现最简单的CNN
上面定义了一个简单地神经网络CNN,它包含了两个卷积层,三个全连接层(又叫先行层或者Dense层),我们的每一层都扩展了pytorch的神经网络模块类,并且在每一层中有两个东西默认封装在里面,一个forward前向传播方法和一个权重张量,每层中的权重张量包含了随着我们的网络在训练过程中学习而更新的权重值,这就是我们在我们的Network类中指定的层作为类属性的原因。在Linear层中,我们使用了权重张量:这个权重张量将被我们的Network类继承,并且作为我们网络可学习的参数,在Module中的定义.原创 2021-10-17 23:04:31 · 3392 阅读 · 0 评论 -
Pytorch教程(十六):FashionMNIST数据集DataSet DataLoader
torchvision.datasets由于MNIST数据集太简单,简单的网络就可以达到99%以上的top one准确率,也就是说在这个数据集上表现较好的网络,在别的任务上表现不一定好。因此zalando research的工作人员建立了fashion mnist数据集,该数据集由衣服、鞋子等服饰组成,包含70000张图像,其中60000张训练图像加10000张测试图像,图像大小为28x28,单通道,共分10个类,如下图,每3行表示一个类。所以我们通过torchvison来处理FashionMNIST原创 2021-10-14 09:23:21 · 10248 阅读 · 0 评论 -
Pytorch教程(十五):element-wise、Broadcasting
t1 = torch.tensor([ [1,2], [3,4]], dtype=torch.float32)t2 = torch.tensor([ [9,8], [7,6]], dtype=torch.float32)我们先创建了两个秩为2,形状为KaTeX parse error: Undefined control sequence: \tmes at position 3: 2 \̲t̲m̲e̲s̲ ̲2的张量,这意味着我们有两个轴,他们都有两个元素的长度,原创 2021-10-07 21:35:07 · 2309 阅读 · 0 评论 -
Pytorch教程(十四):stack、flatten
stackt1 = torch.tensor([ [1,1,1,1], [1,1,1,1], [1,1,1,1], [1,1,1,1]])t2 = torch.tensor([ [2,2,2,2], [2,2,2,2], [2,2,2,2], [2,2,2,2]])t3 = torch.tensor([ [3,3,3,3], [3,3,3,3], [3,3,3,3], [3,3,3,3]])t =原创 2021-10-05 17:45:39 · 441 阅读 · 0 评论 -
Pytorch教程(十三):reshape、squeeze、flatten
reshape首先我们创建一个tensor,shape:3×43 \times 43×4,是一个两个轴的二阶张量。第一个轴的长度是3,第二个轴的长度是4,第一个轴的元素是数组,第二个轴的元素是数字我们可以用torch.size()或者torch.shape来获取形状张量形状给出的另一个重要特征是张量中包含的元素的个数,也可以通过获取shape中各分量的值乘积来推导出来:因为我们的元素有12个,因此任何reshape操作都必须考虑这12个元素。squeeze压缩squeeze()压缩一个原创 2021-10-05 17:10:12 · 1464 阅读 · 0 评论 -
PyTorch教程(十二):链式法则
通过使用链式法则就可以把最后一层的误差一层一层的输出到中间层的权值中去,从而得到中间层的梯度信息,然后就可以很好的更新权值,得到最优化的效果。链式法则公式:∂y∂x=∂y∂u∂u∂x\frac {\partial y}{\partial x} = \frac {\partial y }{\partial u} \frac {\partial u}{\partial x} ∂x∂y=∂u∂y∂x∂u对于一个简单的线性层来说不需要链式法则,但是对于对于实际的神经网络来说,展开公式是非常复杂的,不原创 2021-02-23 15:34:49 · 582 阅读 · 0 评论 -
PyTorch教程(十一):多输出的感知机以及梯度
上一节中介绍了单层感知机,感知机的输出节点只有一个,只有O0O_0O0没有O1O_1O1。对于单层感知机的梯度下降公式如下:∂E∂wj0=(O0−t)∗O0(1−O0)xj0\frac {\partial E}{\partial w_{j0}} = (O_0 -t)*O_0(1-O_0)x_j^0∂wj0∂E=(O0−t)∗O0(1−O0)xj0即对参数wj0w_{j0}wj0的梯度。可以看出wj0w_{j0}wj0的梯度跟这一层的输出权值以及xj0x_{j0}xj0有关。多原创 2021-02-23 11:29:06 · 466 阅读 · 0 评论 -
PyTorch教程(十):单层感知机以及梯度更新
单层感知机模型y=XW+by=∑xi∗wi+by = XW + b \\y = \sum x_i*w_i+ by=XW+by=∑xi∗wi+b单层感知机模型的每一个输入节点xix_ixi和对应的权重wiw_iwi相乘累加后,与bias相加,便得到了预测值。我们使用sigmoid函数作为激活函数,通常使用符号σ\sigmaσ表示。对于最左边的输入层的上标,也就是xn0x_n^0xn0中的0表示第0层,n表示第0层第n个元素节点。从www到σ\sigmaσ是1层,wij1w^1_{i原创 2021-02-22 17:14:52 · 1459 阅读 · 0 评论 -
PyTorch教程(九):损失函数与Loss的梯度
均方差Mean Squared Error(MSE)MSE基本形式:loss=∑[y−(xw+b)]2loss = \sum[y-(xw+b)]^2loss=∑[y−(xw+b)]2这里的模型使用非常简单的线性感知机,如果使用其他的网络,则修改为loss=∑[y−f(x;w,b)]2loss = \sum[y-f(x;w,b)]^2loss=∑[y−f(x;w,b)]2需要注意的是,这里的均方差MSE和L2-norm是有区别的:l2−norm=∑(y1−y2)2l2-norm=\sqrt{\原创 2021-02-22 15:43:06 · 8067 阅读 · 3 评论 -
PyTorch教程(八):常见激活函数与Loss的梯度
如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合,这种情况就是最原始的感知机。如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。上图就是一个最简单的激活函数,当∑i=0N>0\sum_{i=0}^N>0∑i=0N>0时节点才会激活。但是这个激活函数有一个问题是不可导,在∑i=0N=0\sum_{i=0}^N=0∑i=0N=0处是处于不连续的情况下,因原创 2021-02-22 12:52:16 · 450 阅读 · 0 评论 -
PyTorch教程(七):属性统计
范数1-范数:∥x∥1=∑i=1N∣xi∣\left \| x \right \|_1=\sum_{i=1}^N\left| x_i \right|∥x∥1=∑i=1N∣xi∣ 即向量元素绝对值之和。import torcha = torch.full([8],1)b = a.view(2,4)# tensor([[1, 1, 1, 1],# [1, 1, 1, 1]])c = a.view(2,2,2)# tensor([[[1, 1],# [1, 1原创 2021-02-20 16:00:29 · 467 阅读 · 0 评论 -
PyTorch教程(六):算数运算
import torcha = torch.rand(3,4)# tensor([[0.0422, 0.9152, 0.5486, 0.8753],# [0.3918, 0.6056, 0.0634, 0.9498],# [0.4444, 0.2209, 0.8165, 0.1533]])b = torch.rand(4)# tensor([0.4145, 0.2913, 0.1655, 0.3705])a + b# tensor([[0.4567, 1.2原创 2021-02-19 23:14:07 · 1235 阅读 · 0 评论 -
PyTorch教程(五):Broadcasting
Broadcasting可以自动进行维度的扩展,而且不需要拷贝数据。例如:import torcha = torch.rand(3,4)# tensor([[0.0422, 0.9152, 0.5486, 0.8753],# [0.3918, 0.6056, 0.0634, 0.9498],# [0.4444, 0.2209, 0.8165, 0.1533]])b = torch.rand(4)# tensor([0.4145, 0.2913, 0.1655,原创 2021-02-19 22:14:32 · 435 阅读 · 0 评论 -
PyTorch教程(四):维度变换
view和reshape在PyTorch0.3版本中使用view,在PyTorch0.4以后增加了reshape,作用是将一个shape转变为另一个shape。shape变化的前提是保证numel()一致a = torch.rand(4,1,28,28) # 4张图片,灰度,28长,28宽# torch.Size([4, 1, 28, 28])a.view(4, 1*28*28) a.view(4, 1*28*28).shape # torch.Size([4, 784]) # 这里丢失了原原创 2021-02-18 20:46:57 · 1220 阅读 · 0 评论 -
PyTorch教程(三):索引与切片
a = torch.rand(4,3,28,28) # 4张图片,3通道,高度28,宽度28 a[0].shape # torch.Size([3, 28, 28]) 表示第0张图片的shape是3通道,高度28,宽度28 a[0,0].shape # torch.Size([28, 28]) 表示第0张图片第0个通道的shape a[0,0,2,4].shape # tensor(0.5649) 表示第0张图片第0个通道第2行第4列的值是0.5649a[:2].shape # torch.Si.原创 2021-02-18 19:39:43 · 338 阅读 · 0 评论 -
PyTorch教程(二):创建Tensor
从numpy中引入数据a = numpy.array([2,3.3])torch.from_numpy(a) # tensor([2.0000, 3.3000], dtype=torch.float64)a = numpy.ones([2,3])torch.from_numpy(a)# tensor([[1., 1., 1.],# [1., 1., 1.]], dtype=torch.float64)从list中引入数据torch.tensor([2, 3.2]) # te原创 2021-02-18 16:46:40 · 900 阅读 · 0 评论 -
PyTorch教程(一):张量数据类型
pythonPyTorchintIntTensor of size()floatFloatTensor of size()Int arrayIntTensor of size[d1,d2,…]Float arrayFloatTensor of size [d1,d2,…]string–需要注意的是,python中的string,在PyTorch中没有对应的数据类型,一般使用One-hot可以进行表示,也就是[0,1,0,0,0]的方式表示一个字符...原创 2021-02-18 14:13:01 · 709 阅读 · 0 评论
分享