人工智能---深度学习

深度学习之算法

1 人工智能
人工智能具体可以做哪些事情呢?该领域的研究包括机器人、语言识别、图像识别、自然语言处理、风险预测和专家系统等
1.1 内容
什么是人工智能
人工智能与数学的关系
人工智能主要分类及常用算法
1.2 人工智能
人工智能由人工和智能两个词组成,智能是他的主要特征,而人工是这种智能的修饰词.地球上具备智慧可以思考的动物,人类首屈一指. 引用网上一个很恰当的词来形容人工智能 – 拟人. AI是人工的让机器像人类一样思考.

1.3 人工智能和数学的关系
一个初级的司机熟悉车的基本操作,可以驾驶车到自己想去的地方,人工智能的初级是可以调用人工智能框架内由他人写好的算法来做基本的事情,事实上这也将是从事AI之后占比重最大的部分.
中级的司机可以熟练驾驶车辆,理解汽车的主要工作原理同时可以应付车辆常见的故障,当车辆抛锚时可以自己先尝试修理车辆.这对应着人工智能的中级工程师,他们熟练掌握常用算法的推导过程,理解这些算法的思想并知道哪些算法适合做哪些事情,为什么.
一个高级的司机,应该是一名汽车爱好者.他擅长车辆的改装,了解每种型号的发动机,必要的时候对各种不同的组件进行改装,组合,以便实现自己对动力 稳定性等不同需求.AI的高级工程师也一样,他善于抽取出算法的核心引擎并同其他算法组装,提高算法和业务的契合度.
例子列举的并不恰当,高手见谅.但这利于我们刚开始接触AI时候的理解.看到这里有些朋友会问,那数学呢,数学同AI的关系又是什么样子?同样是开车这个例子.数学在里边起到的作用就是:整个汽车开动起来,各个档需要多少动力,发动机需要用什么材料才能在产生动力的同时保证寿命.汽车各个材料间组装的公差等是什么要求.
可以看出,一名汽车生产厂的设计师需要学习数学,因为这是汽车制造的灵魂,但如果你是一个司机,那我们只需要会调用部分已有的数学公式即可.我们不需要去验证这些已有的公式是正确的,我们工作的灵魂,是算法思想!只要你具备一些简单的数学基础并且在学习AI的过程中补习自己遇到不会的知识点,学习AI是完全没有问题的.

1.4 人工智能与常用算法

1.5 硬盘分区
fdisk /dev/sdb

键入m,可看到帮助信息
键入n表示新分区

键入p选择基本分区
键入1表示建一个分区
w:保存操作。q:退出。d:删除一个分区
1.6 格式化磁盘分区
用ext4格式对/dev/sdb1进入格式化
命令:mkfs.ext4 /dev/sdb1
1.7 挂载分区
创建新的挂载点
mkdir /work
将新磁盘分区挂载到/work目录下
mount -t ext4 /dev/sdb1 /work
查看挂载
df -h
1.8 设置开机时自动挂载:
1.8.1 查看磁盘UUID信息
命令:blkid

1.8.2 编辑/etc/fstab文件
命令:vim /etc/fstab

重启查看是否已挂载reboot df –h
/dev/sdb1: UUID=“8d7738aa-8060-4606-8749-17cdbbfb084e” TYPE=“ext4” PARTUUID=“634b6d55-01”

2 多元线性回归
我们知道y=ax+b是一元一次方程,y=ax1+bx2+c(1和2是角标,原谅我的懒)是二元一次方程.其中,"次"指的是未知数的最大幂数,"元"指的是表达式中未知数的个数(这里就是x的个数).那么"多元"的意思可想而知,就是表达式中x(或者叫自变量,也叫属性)有很多个.

2.1 Anaconda
Python目前有2和3两个版本,因此Anaconda也在Python2和Python3的基础上推出了两个发行版,即Anaconda2和Anaconda3。有时候我们会在同时使用python2.7和python3.5两个版本,因此有必要考虑它们的共存问题。

2.1.1 安装
下载地址:https://repo.continuum.io/archive/index.html
(1) 上传文件 Anaconda3-2.0.1-Linux-x86_64.sh
(2) 将该文件设置为可执行
(3) 同意协议,输入yes
(4) 更改默认安装目录(不能提前建好),输入路径即可
(5) 之后yes(当前用户有效)
若选择no(设置所有用户有效)
编辑/etc/profile文件,添加环境变量:
export ANACONDA_HOME=安装路径
export PATH= A N A C O N D A H O M E / b i n : ANACONDA_HOME/bin: ANACONDAHOME/bin:PATH
最后生效profile文件(source /etc/profile)

(6) 验证,重新开启一个终端,输入python3、python
Python 3.4.1 |Anaconda 2.0.1 (64-bit)| (default, May 19 2014, 13:02:41)

2.1.2 使用
因为Anaconda.org的服务器在国外,所以需要安装packages时,你会发现conda下载的速度经常很慢,所幸清华TUNA镜像源有Anaconda仓库的镜像,我们将其加入conda的配置即可。

添加Anaconda的TUNA镜像

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/

设置搜索时显示通道地址

conda config --set show_channel_urls yes

常用命令

更新包:conda update –all
列出已安装包:conda list
安装包:conda install (-n 环境名称) package(=version)
删除包:conda remove package
搜索包名:conda search xxx
2.1.3 创建虚拟环境
查看创建好的环境
conda info --envs
创建虚拟环境
conda create -n your_env_name python=X.X(2.7、3.6等)
激活虚拟环境
source activate your_env_name
退出
source deactivate
删除
conda remove -n your_env_name --all
安装
conda install -n your_env_name [package]
conda remove --name your_env_name package_name
使用命令jupyter kernelspec list可以查看当前的kernel
conda install ipykernel

2.1.4 管理
Conda的环境管理功能允许我们同时安装若干不同版本的Python,并能自由切换。对于上述安装过程,假设我们采用的是Python 2.7对应的安装包,那么Python 2.7就是默认的环境(默认名字是root,注意这个root不是超级管理员的意思)。

2.2 安装jupyter notebook
2.2.1 升级pip
由于之前安装了anaconda3,这会自动安装好python的pip下载工具,不过这个pip版本可能过低,最好不要升级。
pip install --upgrade pip
升级问题:
from pip import main
if name == ‘main’:
sys.exit(main._main())

conda update pip(使用这个!!!)

降级:
python -m pip install pip==9.0.3
2.2.2 安装
conda install jupyter
conda install jupyter notebook
2.2.3 配置
2.2.3.1 生成配置文件
jupyter notebook --generate-config
Writing default config to: /root/.jupyter/jupyter_notebook_config.py
sudo gedit /home/python/.jupyter/jupyter_notebook_config.py
如果出现:
如果输入 jupyter notebook --generate-config提示:
Running as root is not recommended. Use –allow-root to bypass.
则在后边加上 --allow-root
jupyter notebook --generate-config --allow-root
2.2.3.2 修改配置文件
vim /root/.jupyter/jupyter_notebook_config.py
将c.NotebookApp.allow_root = False前边的 ‘#‘去掉,在把False修改为True
2.2.3.3 生成登录密码
打开 ipython
from notebook.auth import passwd
passwd()
Enter password: 输入一次密码
Verify password: 再次输入密码
sha1:ae9e423f48ae:a8…
‘sha1:de7628a47236:140a1b363544faca3c1ce39bcf036452b5051480’ 123456
2.2.3.4 再次修改配置文件
vi /root/.jupyter/jupyter_notebook_config.py
c.NotebookApp.ip=’
c.NotebookApp.password = u’sha1:ae9e423f48ae:a8
c.NotebookApp.open_browser = False
c.NotebookApp.port =8888 #任意空闲端口,使用默认8888也可以
c.NotebookApp.allow_credentials = True
c.NotebookApp.ip='

c.NotebookApp.password=u’sha1:de7628a47236:140a1b363544faca3c1ce39bcf036452b5051480’
c.NotebookApp.open_browser=False
c.NotebookApp.port=7788
c.NotebookApp.notebook_dir=‘/newdisk/jupyter_project’
2.2.3.5 启动
jupyter notebook
http://192.168.37.3:7788 输入密码进入

2.3 numpy
2.3.1 简介
支持矩阵操作和运算,非常高效,使用c语言编写
现在比较流行的机器学习框架(例如Tensorflow/PyTorch等等),语法都与Numpy比较接近
2.3.2 内容
调用numpy包
2.3.2.1 数组简介、构造ndarray
调用np.array初始化list
a = np.array([1, 2, 3])
print(a.shape) (1,3)
b = np.array([[1,2,3], [2,3,4]])
print(b.shape) (2,3)
a = np.zeros((2,3))
b = np.ones((1,2))
c = np.full((2,2), 8)
d = np.eye(3)
e = np.random.random((3,2))
arr = np.random.randn(6,3)
f = np.empty((2,3,4))
y = np.empty_like(x)
g = np.arange(15)
数组可以有不同的数据类型
arr = np.array([1,2,3])
print(arr.dtype) int32
arr = np.array([1,2,3], dtype=np.float64)
print(arr.dtype)
生成数组时可以指定数据类型,如果不指定numpy会自动匹配合适的类型
使用astype复制数组并转换数据类型
float_arr = int_arr.astype(np.float64)
int_arr.astype(dtype=float_arr.dtype)

2.3.2.2 数组取值、赋值

a[0] a[1]
可以像list一样切片(多维数组可以从各个维度同时切片):
b = a[0:2,2:4]
row_r1 = a[1,:]
row_r2 = a[1:2, :]
a[[0,1,2], [0,1,0]] 等价于 np.array([a[0,0], a[1,1], a[2,0]])
用下标生成一个向量
b = np.array([0, 2,0,1])
a[np.arange(4), b]
a[np.arange(4), b] += 10
条件判断
bool_index = (a > 2)
print(bool_index)
a[bool_index]
a[a>2]

2.3.2.3 数学运算
x = np.array([[1,2],[3,4]], dtype=np.float64)
y = np.array([[5,6],[7,8]], dtype=np.float64)
x+y np.add(x,y)
x-y np.subtract(x,y)
x*y np.multiply(x,y)
x/y np.divide(x, y)
np.sqrt(x)
向量内积
v.dot(w) np.dot(v,w)
矩阵的乘法
x.dot(v) np.dot(x, v)
转置
x.T
高维的tensor也可以做转置 三维矩阵以上叫tensor
arr = np.arange(16).reshape(2,2,4)
print(arr, arr.shape)
[[[ 0 1 2 3]
[ 4 5 6 7]]

[[ 8 9 10 11]
[12 13 14 15]]] (2, 2, 4)
print(arr.transpose((1,0,2))) 一维跟二维位置变化
arr.swapaxes(1,2)
多维数组相乘
np.matmul(x,y).shape
矩阵内元素的运算
求和
np.sum(x) x.sum()
np.sum(x, axis=0) 列方向
np.sum(x, axis=1) 横方向
np.mean(x) np.mean(x, axis=0)
x.cumsum(axis=0) 按列相加
x.cumprod(axis=0) 按列相乘
arr.sort() 升序排序

2.3.2.4 Broadcasting
如果要用小的矩阵去和大的矩阵做一些操作,但是希望小矩阵能循环和大矩阵的那些块做一样的操作,那急需要Broadcasting
给x的每一行都逐元素加上一个向量
x = np.array([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]])
v = np.array([1, 0, 1])
x + v
当操作两个array时,numpy会逐个比较它们的shape,在下述情况下,两arrays会兼容和输出broadcasting结果:

  1. 相等
  2. 其中一个为1,(进而可进行拷贝拓展已至,shape匹配)

2.3.2.5 逻辑运算
x_arr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
y_arr = np.array([2.1, 2.2, 2.3, 2.4, 2.5])
cond = np.array([True, False, True, True, False])
np.where(cond, x_arr, y_arr)
[ 1.1 2.2 1.3 1.4 2.5]

2.3.2.6 数组高级操作
使用reshape来改变tensor的形状
arr = np.arange(8)
arr.reshape(2,4)
arr.reshape(2,-1) 如果我们在某一个维度上写上-1,numpy会帮我们自动推导出正确的维度
高维数组可以用ravel来拉平
arr.ravel()
np.concatenate([arr1, arr2], axis=0) 增加横,按列连接
np.vstack((arr1, arr2)) 堆叠
np.concatenate([arr1, arr2], axis=1)
np.hstack((arr1, arr2))
拆分数组:分成三部分 0 1 2 3-
first, second, third = np.split(arr, [1,3], axis=0) 按行分
辅助堆叠
arr = np.arange(6)
arr1 = arr.reshape((3, 2))
arr2 = np.random.randn(3, 2)
np.r_[arr1, arr2] 按行堆叠
np.c_[np.r_[arr1, arr2], arr] c_用于按列堆叠
np.c_[1:6, -5:0] 切片直接转为数组
array([[ 1, -5],
[ 2, -4],
[ 3, -3],
[ 4, -2],
[ 5, -1]])
repeat重复
arr = np.arange(3)
arr.repeat(3) [0 0 0 1 1 1 2 2 2]
arr.repeat([2,3,5]) [0 0 1 1 1 2 2 2 2 2]
arr.repeat(2, axis=0) # 每行重复两遍
arr.repeat(2, axis=1) # 每列重复两遍
整块重复
np.tile(arr, 2)
np.tile(arr, (2,3)) #行重复两遍,列重复三遍

2.3.2.7 文件输入输出
读取csv文件作为数组
arr = np.loadtxt(‘array_ex.txt’, delimiter=‘,’)
保存
np.save(‘some_array’, arr)
np.savetxt(‘a.txt’,arr)
多个数据保存
np.savez(“array_archive.npz”, arr=arr, b=arr2, c=arr3)
arch = np.load(‘array_archive.npz’)
print(arch[‘arr’])

2.4 pandas
python数据分析library
基于numpy (对ndarray的操作) 处理ndarray 处理高维数据运算
有一种用python做Excel/SQL/R的感觉
2.4.1 目录
2.4.1.1 Series
数据结构series pandas.core.series.Series

可以用list或dict构造series
Series是一个一维的数据结构 object
Range对象创建
obj=pd.Series(range(3),index=[“0”,“1”,“2”])
List构建
s = pd.Series([7, ‘Beijing’, 2.17, -12344, ‘Happy Birthday!’])
0 7
1 Beijing
2 2.17
3 -12344
4 Happy Birthday!
dtype: object
自定义下标
s1=pd.Series(list1,index=[7, ‘Beijing’, 2.17, -1232, ‘Happy birthday!’])
Dict构建
dict1={‘Beijing’: 55000, ‘Shanghai’: 60000, ‘Shenzhen’: 50000, ‘Hangzhou’:20000,
‘Guangzhou’: 25000, ‘Suzhou’: None}
s2=pd.Series(dict1)
dtype: float64
选择数据
一个key s2[“Beijing”]
多个key s2[[“Beijing”,“Guangzhou”,“Hangzhou”]]
赋值
s2[“Beijing”]=55000
数学运算
s2/2
s2*2
np.square(s2)
数据缺失
‘Hangzhou’ in s2 True、False
s2.notnull()
Beijing True
Guangzhou True
Hangzhou True
Shanghai True
Shenzhen True
Suzhou False
dtype: bool

s2.isnull()

切片
s2[::]
s2[1:3]
2.4.1.2 DataFrame
一个Dataframe就是一张表格,Series表示的是一维数组,Dataframe则是一个二维数组,可以类比成一张excel的spreadsheet。也可以把Dataframe当做一组Series的集合。
pandas.core.frame.DataFrame

创建
由dict创建,
字典:列表 列名默认由key指定,行由0-n
dict2={‘city’: [‘Beijing’, ‘Shanghai’, ‘Guangzhou’, ‘Shenzhen’, ‘Hangzhou’, ‘Chongqing’],
‘year’: [2016,2017,2016,2017,2016, 2016],
‘population’: [2100, 2300, 1000, 700, 500, 500]}
dataframe1=pd.DataFrame(dict2)
print(dataframe1)
type(dataframe1)
city population year
0 Beijing 2100 2016
1 Shanghai 2300 2017
2 Guangzhou 1000 2016
3 Shenzhen 700 2017
4 Hangzhou 500 2016
5 Chongqing 500 2016

字典:字典 列名:key 行名 字典中的key
dict3={‘Beijing’: {2016: 2100, 2017:2200},
‘Shanghai’: {2015:2400, 2016:2500, 2017:2600}}
dataframe2=pd.DataFrame(dict3)
print(dataframe2)
Beijing Shanghai
2015 NaN 2400
2016 2100.0 2500
2017 2200.0 2600

列名和顺序可以指定,index也可以指定,默认0-n
列名不存在时数据为NaN
顺序是与key匹配的
dataframe3=pd.DataFrame(dict2,columns=[‘year’, ‘city’, ‘population’, ‘debt’],index=[‘one’, ‘two’, ‘three’, ‘four’, ‘five’, ‘six’])
选取数据
根据列名选取,数据类型为series
dataframe3[“city”]
dataframe3.city
根据行选取,数据类型为series
dataframe3.ix[“six”]
dataframe3.ix[5]
赋值
某个元素赋值
dataframe3[“city”][“one”]=“shanxi”
某列、某行赋值
dataframe3.debt=10000 dataframe3.debt=np.arange(6)
用Series来指定需要修改的index以及相对应的value,没有指定的默认用NaN.
val = pd.Series([200, 300, 500], index=[‘two’, ‘three’, ‘five’])
frame2[‘debt’] = val

frame2.ix[‘six’] = 0
逻辑赋值
frame2[‘western’] = (frame2.city == ‘Chongqing’)

dataframe3.columns

dataframe3.index
转置
dataframe3.T
指定index的顺序,使用切片初始化数据
dataframe3[“city”][1:3]

指定index、列名
dataframe3.index.name=“no”
dataframe3.columns.name=“info”
获取数据
dataframe3.values type:numpy.ndarray

2.4.1.3 Index, reindex and hierarchical indexing
创建Index object pandas.indexes.base.Index
方法1:
obj=pd.Series(range(3),index=[“0”,“1”,“2”])
index=obj.index
type(index)
Index([‘0’, ‘1’, ‘2’], dtype=‘object’)
切片 index[1:]
Index值是不能更改的
方法2:
index2=pd.Index(np.arange(5))
s4=pd.Series([2,5,7,5,6], index=index2)
s4.index is index2

2.4.1.4 Merge, Join, Concatenate, Groupby and Aggregate

2.4.1.5 Read from csv

随堂案例:bikes routes counts

2.5 数据获取与处理
多种格式数据加载、处理与存储
文本数据
Csv txt

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 深度学习-3D点云实战系列是一套教程,主要集中在用户如何利用深度学习技术在三维图像(点云)中进行识别、分类、分割等方面进行实战操作。该教程分为多个部分,从基础理论知识开始,到具体的应用案例,提供了具有实用性的操作方法和技巧。 该系列教程所需的数据集、代码和操作指南都可在下载链接中得到。通过学习这些教程,用户可以深入了解三维图像的特征提取、分类和分割等方面的应用技术,为实际应用做好充分准备。 对于研究三维图像应用的学者和从业者而言,深度学习-3D点云实战系列是一个很好的学习和工作工具,可以帮助他们更好地理解和应用所需的技术方法。同样,这些知识和技巧也能够通过应用到实际场景中,为用户带来更好的应用体验和效果。 总的来说,深度学习-3D点云实战系列是一套具有实用性和应用价值的教程,对学习研究三维图像应用的用户有很大的帮助和意义。通过下载和使用该系列,用户可以更好地掌握相关技术和方法,提升自己在相关领域的竞争力和应用能力。 ### 回答2: 深度学习已经成为当前最热门的技术领域之一,随着科技的迅猛发展,3D点云技术也越来越受到人们的关注。为了提高大家在这方面的知识水平,有关3D点云实战的系列教程应运而生,这一系列教程是在深度学习的背景下,讲述了3D点云于人工智能的结合应用。 该系列下载包含多篇文章,旨在通过通俗易懂的方式,带领大家深入了解3D点云数据的处理、特征提取、分类、语义分割等方面。同时,还涉及到了目标检测、跨模态转换、深度生成模型等实际应用场景。这一系列教程着重讲述了3D点云与深度学习的结合,并详细介绍了几种常见的深度学习算法模型,如PointNet、GRNet等模型。 这一系列教程可供各种人群使用,无论您是初学者还是专业人士,都可以通过这些教程迅速掌握3D点云与深度学习在实际项目中的应用。此外,教程中还提供了大量的相关代码和数据集,可以方便读者进行进一步的实验和研究。 总之,该系列的下载是一份非常有价值的资料,具有重要的现实意义和应用价值,对关注深度学习和3D点云技术的朋友来说,是一份不可多得的学习材料。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值