Deep Learning with PyTorch: A 60 Minute Blitz 自学笔记
Tensor
张量是一种特殊的数据结构,与数组和矩阵非常相似。在PyTorch中,我们使用张量对模型的输入和输出以及模型的参数进行编码
张量类似于NumPy的ndarray,除了张量可以在GPU或其他专用硬件上运行以加速计算
12import torchimport numpy as np
Tensor Initialization
张量可以通过多种方式初始化
张量可以直接从数据中创建。数据类型是自动推断的。torch.tensor(data) 12data = [[1, 2], [3, 4]]x_data = torch.tensor(data)
张量可以从NumPy中的arrays创建,反之亦然。torch.from_numpy(np_array) 12np_array = np.array(data)x_np = torch.from_numpy(np_array)
从另一个张量,新张量将保留参数张量的属性(形状、数据类型)。torch.ones_like(tensor,type) & torch.rand_like(tensor,type) 1234567 ...
数据结构与算法A 第三章栈与队列
栈和队列是典型的线性结构,常被称为“操作受限的线性表”或“限制存取点的线性表”
栈
栈是一种限定仅在限制在一端进行插入和删除的线性表,无论是插入元素还是删除读取栈中的元素,都只能固定在线性表的一断进行。这一端被称为栈顶(top),另一端叫做栈底(bottom)
最后插入栈中的元素是最先被删除或读取的元素,而最先压入的元素则被放在栈的底部。栈的修改是按后进先出的原则进行(Last-In First-Out,LIFO),也称“下推表”
push操作:往栈中插入元素,简称压栈或入栈;pop操作:删除栈顶元素,简称出栈或弹出
栈的ADT1234567891011template <class T> // 栈的元素类型为 Tclass Stack { public: // 栈的运算集 void clear(); // 变为空栈 bool push(const T item); // item入栈,成功则返回真,否则返回假 bool pop(T & item); // 返回 ...
AI中的编程 Parallel Communication
GPU HardwareThread Blocks And GPU Hardware
一个thread对应GPU核,tread block对应SM(Streaming Multiprocessor),而一个grid对应若干个SM
A thread block contains many threads
A thread block must be on one SM; a SM may run more than one block
The programmer is responsible for defining blocks
The GPU is responsible for allocating thread blocks to hardware SMs
The threads run in parallel, and CUDA makes few guarantees about when and where thread blocks will run.thread block间的运行是并行的,无约束的
A Thread-Block Programming ...
数据结构与算法A 第二章线性表
线性表的概念线性表的抽象数据类型
线性表的定义:线性表(简称为表)是零个或多个元素的有穷序列L=(k0,k1,…,kn-1);线性表是由称为元素的数据项组成的一种有限且有序的序列,这些元素也称为结点或表目
线性表的逻辑结构:L=<K,R>其中,K={k0,k1,…,kn-1},R={r:线性关系}。
i称为ki的索引或下表。所含元素的个数称为表的长度。长度为0的表称为空表。k0是第一个元素kn-1是最后一个元素。ki是ki+1的前驱,ki+1是ki的后继
唯一开始的结点:没有前驱;唯一终止的结点:没有后继。内部节点:有唯一的直接前驱也有一个唯一的直接后继
线性表的关系r是前驱关系,应具有反对称性和传递性
要求:
内部结点具有相同的数据类型
每个元素都有自己的位置[0,n-1]
在线性表上实施的操作:
对整个表的操作:创建或置空一个线性表、合并两个线性表、判断线性表是否为空或满
对表中元素的操作:查找线性表中满足一定条件的元素、在线性表中插入或删除指定元素
线性表ADT:
123456789101112131415 ...
数据结构与算法A 第一章概论
数据结构
数据结构的三要素:逻辑结构、存储(物理)结构、运算
数据的逻辑结构
逻辑结构反映了事物的组成结构及事物之间的逻辑关系
数据的逻辑结构可以用一个二元组B=(K,R)来表示。其中K是数据结点集合,R是数据之间的二元关系,其中对于<k,k’>∈R,我们称k’为k在关系R上的后继结点;k是k’在关系R上的前驱结点
结点的类型
结点的数据类型可以是基本数据类型,也可以是复合数据类型
结构的分类
用R的性质来刻画数据结构的特点,并进行分类
线性结构:r称为线性关系,也称为前驱关系。每一个结点最多只有一个前驱结点和一个后继结点。e.g.数组、链表、队列
树形结构:r称为层次关系。所有结点有且仅有一个前驱,但是后继的数目不加限制
图结构:结点的前驱和后继的数目不加任何约束
数学上看,树形结构和图结构的基本区别是“每个结点是否仅仅从属于一个直接前驱”而线性结构和树形结构的基本区别是“每个结点是否仅有一个直接后继”
自顶向下的逻辑结构分析设计方法:先明确数据结点,及其主要关系r,然后分析数据结点的数据类型。如果数据结点的逻辑结构比较复杂,那么把他作为下一个 ...
AI中的编程 Parallel Programming
并行编程的介绍 :CPU vs GPU :
CPU: Complex control circuit
good:Flexibility + Performance
bad:Expensive in terms of power
GPU: Simple control circuit
good:More circuit for parallel computation
good:More power efficient
bad:Less flexibility, more restrictive programming models
The CPU is Optimized for Latency,The GPU is Optimized for Throughput
CUDA is Written in C with Extensions :
The CUDA complier complies a CUDA program into two parts, which runs on CPUs and GPUs
step1:Data:cpu->gpu
step2 ...
AI中的编程 LeNet(pytorch讲解)
Data Representation in PyTorchThe Tensor in PyTorch is actually a multidimensional array1234567891011121314151617import torchimport numpy as np# 类比于C++中的includedata = [[1, 2], [3, 4]]# []代表多维(2x2)数组x_data = torch.tensor(data)# 转换成pytorch的tensor,将Python列表转换为PyTorch张量,数据类型根据输入自动推断np_array = np.array(data)# 将Python列表转换为NumPy数组,方便与NumPy库进行后续操作x_np = torch.from_numpy(np_array)# 将NumPy数组转换为PyTorch张量,这样可以利用NumPy的操作,且数据存储方式相同x_rand = torch.rand_like(x_data, dtype=torch.float)# 创建一个与x_data形状相同的张量,初始化,生成浮 ...
CS自学指南 CS61A: Structure and Interpretation of Computer Programs
第一章 使用函数构建抽象 :1.2 编程要素 :
语言的三种机制 :
原始表达式和语句:语言所关心的最简单的个体
组合方法:由简单元素组合构建复合元素
抽象方法:命名复合元素,并将其作为单元进行操作
任何强大的编程语言都必须能表达基本的数据和函数,并且提供对函数和数据进行组合和抽象的方法
表达式表示的数字可以与数学运算符组合形成一个复合表达式,解释器将对其进行求值:
1234567>>> 4242>>> -1 - -10>>> 1/2 + 1/4 + 1/8 + 1/16 + 1/32 + 1/64 + 1/1280.9921875# 这些数学表达式使用中缀表示法(infix notation),运算符(例如 +、-、* 或 /)出现在操作数之间。
最重要的一种复合表达式是调用表达式,它将函数运用于一些参数上
例如,max 函数会输出一个最大的输入值,也就是将多个输入映射到了单个输出上
123456>>> max(7.5, 9.5)9.5'''调用表达式包含子表达式(sub ...
程序设计实习 新标准C++程序设计
第一章 从C到C++ :引用和函数参数的传递 :
C++定义“引用”的方式如下 : 类型名 & 引用名 = 同类型的某变量名;
例如 :
123int n;int & r = n;//r是一个引用,类型是int &
注意事项 : 定义引用要初始化 只能引用变量
常引用 : 前面加const,不能通过常引用修改引用的内容
12345int n;const int & r = n;//r是一个常引用,类型是const int &r = 200;//编译出错,不能通过常引用去修改其引用的内容
参数传值和参数传引用 : C++中函数参数传递有两种方式:传值和传引用 传值:形参表不是引用,改变形参不改变实参 传引用:形参表是引用,改变形参,实参也改变
参数传值例:
123456789101112131415161718192021#include <iostream>using namespace std;void Swap(int a,int b){ int temp; temp = a ...
西方那一块土 书评6
第十三讲 西方的扩张 :
作者在这一讲中主要提到了领土扩张与殖民帝国、奴隶贸易与全球贸易体系、美洲的开发和大国争霸。这一讲的内容不是很多,相对而言也并没有那么重要,细节性的东西比较多,所以评述也会简略一些。
地理大发现后,殖民扩张兴起,先后出现了西班牙与葡萄牙、荷兰、英国与法国等殖民帝国。
首先先来看看西班牙帝国的衰落原因。西班牙殖民者来到每周以后,掠夺了大量的黄金和白银。但西班牙的衰落却也是从这里开始的:他们不能充分利用这些财富,没有将其留在国内,转化为资本,用于发展本国经济;相反,他们大肆挥霍,追求奢华,把金银财宝送到国外去换取奢侈品。
这样反倒把欧洲其他地方的经济刺激起来,自己却变穷了,所以出现了像堂·吉诃德这样的文学形象:一个破落的贵族,带着一种理想主义的幻想和风车搏斗,结果并不能阻挡风车的转动。西班牙虽然很早就进入重商主义时代,但它的贵族却体现着很多封建的特征,西班牙的海外扩张主要是靠这帮贵族进行的,堂·吉诃德就是这些人的写照。正因为如此,西班牙的重商主义具有浓厚的封建色彩,这是西班牙衰落的重要原因。
18世纪出现英法两强争霸的现象,荷兰则衰落了。荷兰终究地方太小,人力、物 ...








