动手学习机器学习(Day1)
环境配置(云端配置)
进入Linux环境
- 安装build-essential
- 安装python3.8
- 安装miniconda
sudo apt update
sudo apt install build-essential
sudo apt install python3.8
wget https://repo.anaconda.com/miniconda/Miniconda3-py38_23.1.0-1-Linux-x86_64.sh
bash Min…xx.sh
进入conda环境:
bash
进入之后
pip install jupyter d2l torch torchvision
安装完成后
wget https://zh-v2.d2l.ai/d2l-zh.zip //这个文件里会有三个版本的记事本课程文件
sudo apt install zip //因为要解压zip文件
unzip dxxxx.zip
解压后有三个文件夹:mxnet
pytorch
tensorflow
paddle
但是这个版本和教学版本有一点差别,教学版本是幻灯片形式
可以从GitHub上clone以下
git clone https://github.com/d2l-ai/d2l-zh-pytorch-slides
使用slide版本的需要加装插件:
pip install rise
如何ssh将阿里云jupyter映射到本地8888端口:
先开启ssh远程登录:
![[Pasted image 20230408194235.png]]
在本地电脑建立映射:
ssh -L8888:localhost:8888 Ubuntu名@ip地址
数据操作和预处理
在神经网络中,数据通常以数组方式呈现,因此要熟悉数组操作
数组操作
切片:
创建数组:
torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4]])
.ones
.randn
.zeros
arange
同样可行
重构数组:
x.reshape(3,4)
查看数组信息:
x.shape
torch.Size([12])
x.numel()
12
数组计算
torch数组是向量计算
torch.exp(x)
x是一个向量,算出来是一个e^x的数组
张量连结:
X = torch.arange(12, dtype=torch.float32).reshape((3,4))
Y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
torch.cat((X, Y), dim=0), torch.cat((X, Y), dim=1)
cat是一个拼接操作,dim为0,按行拼接,dim为1,按列拼接
数组形状不同,可以通过调用广播机制计算
内存
运行一些操作可能会导致为新结果分配内存
before = id(Y)
Y = Y + X
id(Y) == before
False
说明X和Y相加后,为得到的结果开辟了一个新的空间
也可以避免这种情况,执行原地操作:
Z = torch.zeros_like(Y)
print('id(Z):', id(Z))
Z[:] = X + Y
print('id(Z):', id(Z))
或者
x = torch.tensor([1, 2])
y = torch.tensor([3, 4])
id_before = id(y)
torch.add(x, y, out=y) # y += x, y.add_(x)
print(id(y) == id_before) # True
注:虽然
view
返回的Tensor
与源Tensor
是共享data
的,但是依然是一个新的Tensor
(因为Tensor
除了包含data
外还有一些其他属性),二者id(内存地址)并不一致。
zero_like
是创建一个大小、类型与Y相同但是值都为0的新数组
如果在后续计算中没有重复使用X
,
我们也可以使用X[:] = X + Y
或X += Y
来减少操作的内存开销
numpy
Tensor
转NumPy
a = torch.ones(5)
b = a.numpy()
print(a, b)a += 1
print(a, b)
b += 1
print(a, b)
tensor([1., 1., 1., 1., 1.]) [1. 1. 1. 1. 1.]
tensor([2., 2., 2., 2., 2.]) [2. 2. 2. 2. 2.]
tensor([3., 3., 3., 3., 3.]) [3. 3. 3. 3. 3.]
NumPy数组转Tensor
import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)
print(a, b)a += 1
print(a, b)
b += 1
print(a, b)
[1. 1. 1. 1. 1.] tensor([1., 1., 1., 1., 1.], dtype=torch.float64)
[2. 2. 2. 2. 2.] tensor([2., 2., 2., 2., 2.], dtype=torch.float64)
[3. 3. 3. 3. 3.] tensor([3., 3., 3., 3., 3.], dtype=torch.float64)
还有一个常用的方法就是直接用torch.tensor()
将NumPy数组转换成Tensor
,需要注意的是该方法总是会进行数据拷贝,返回的Tensor
和原来的数据不再共享内存。
A = X.numpy()
B = torch.tensor(A)
type(A), type(B)
(numpy.ndarray, torch.Tensor)
将大小为1的张量转换为Python标量
a = torch.tensor([3.5])
a, a.item(), float(a), int(a)
(tensor([3.5000]), 3.5, 3.5, 3)
Tensor
on GPU
用方法to()
可以将Tensor
在CPU和GPU(需要硬件支持)之间相互移动。
# 以下代码只有在PyTorch GPU版本上才会执行
if torch.cuda.is_available():device = torch.device("cuda") # GPUy = torch.ones_like(x, device=device) # 直接创建一个在GPU上的Tensorx = x.to(device) # 等价于 .to("cuda")z = x + yprint(z)print(z.to("cpu", torch.double)) # to()还可以同时更改数据类型
pandas
读取csv
import pandas as pddata = pd.read_csv(data_file)
data
处理缺失数据
inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]
inputs = inputs.fillna(inputs.mean())
print(inputs)
将input里数值类型的列中的NaN用该列的均值代替
但是有一列是字符串,无法用该方法处理,使用如下方法
inputs = pd.get_dummies(inputs, dummy_na=True)
#把所有不同种类的数值都变成一个特征,并且将NaN视为一个类
print(inputs)
最后,把这些结果转换为张量形式:
import torchX, y = torch.tensor(inputs.values), torch.tensor(outputs.values)
X, y
动手学习机器学习(Day1)相关推荐
- 笔记|李沐-动手学习机器学习|CNN基础知识(视频19-23)
李沐-动手学习机器学习|CNN基础知识 卷积层(视频19) 从全连接到卷积(卷积算子) 进行图像识别的两个原则 如何从全连接层出发,应用以上两个原则,得到卷积 卷积层 二维交叉相关 二维卷积层 交叉相 ...
- 学习机器学习,究竟是理论重要,还是公式推导重要?
随着近几年机器学习的火爆,其从业门槛也越来越高,以至于出现面试者需要现场手推对数几率回归和手写反向传播代码的情况.不论是对机器学习本身的研究,还是岗位的需求,都需要我们对算法有很深的了解,对公式本质有 ...
- 最新版动手学习深度学习和GAN电子书免费下载!
今天给大家推荐一个GAN方面的优质公众号---机器学习与生成对抗网络.该公众号里分享了几本深度学习.GAN等好的电子书资源! 强烈推荐李沐等人的<动手学习深度学习>最新版!完整中文版 PD ...
- tensorflow gpu利用率低_「动手学习Tensorflow」- Tensorflow综述I
" 一文概览Tensorflow方方面面." 大家好,我是人工智能工程师Alpha浪. 今天,我们开始「动手学习Tensorflow - Tensorflow 综述」部分. 快速学 ...
- 信号处理深度学习机器学习_机器学习和信号处理如何融合?
信号处理深度学习机器学习 As a design engineer, I am increasingly exposed to more complex engineering challenges ...
- 机器学习与分布式机器学习_我将如何再次开始学习机器学习(3年以上)
机器学习与分布式机器学习 重点 (Top highlight) I'm underground, back where it all started. Sitting at the hidden ca ...
- 如何学习机器学习、看待算法竞赛?粉丝精选留言
在前几日的赠书活动中,看到大家的积极留言,非常用心,可以看出对机器学习的热爱.经授权,CV君特意将一些52CV粉丝对学习机器学习.参与算法竞赛的看法.理解与经验放出来,与大家分享,值得收藏细品,希望他 ...
- 学习深度学习是否要先学习机器学习?
来源:https://www.zhihu.com/question/382278216 编辑:深度学习与计算机视觉 声明:仅做学术分享,侵删 作者:图灵的猫 https://www.zhihu.com ...
- 动手学习深度学习——Pytorch版教程系列汇总(长期更新版)
动手学习深度学习目录 开发环境配置 1. 基本简介 2. 预备知识 3. 线性神经网络 4. 多层感知器 5. 深度学习计算 6. 卷积神经网络 7. 现代卷积神经网络 8. 循环神经网络 9. 现代 ...
最新文章
- 如何在jupyter notebook上传文件夹
- 人脸识别是怎么识别的?为什么需要大数据?(原理篇)
- sql_mysql注入基础篇
- centos7防火墙操作
- 线程销毁_多线程(2)-Java高级知识(9)
- laravel关于路径的函数
- python离散积分_科学网—python数据处理笔记(三)通道积分图 - 钱磊的博文
- 平面四边形八节点等参单元的平面有限元分析程序
- jquery 进度条 滑块
- 机器学习实战2之科比篮球生涯得分数据分析
- VMware安装CentOS7以及CentOS官网下载自选镜像
- C++核心编程-5 文件操作
- openwrt之修改Luci界面
- 橄榄山软件长期开放 《软件研发》职位,请随时申请
- 做明日达超市,美团电商这次能成吗?
- 【中级计量经济学】Lecture 2 多重共线性
- linux系统怎么装搜狗输入法_Linux之Ubuntu系统安装搜狗输入法
- # Ubuntu执行sudo apt-get update提示:E: 仓库 “https://mirrors.ustc.edu.cn/ubuntu focal Release” 没有 Release
- Parallels Desktop 15.1.4 直装版 — 苹果电脑虚拟机
- Codeforces div2 D. Madoka and The Corruption Scheme