深度学习入门基础 and PyTorch介绍

深度学习入门基础 and PyTorch介绍

深度学习是机器学习的一个分支,深度学习一般是多种简单机器模型的叠加,而现在一般指的是神经网络

  • 机器学习:用人工提取的特征来表述数据→对领域的特定只是进行手动提取(模型算法→优化特征的权重进行模型的学习)
  • 深度学习:用机器提取的特征来表述数据→自动提取内在特征(模型算法→优化特征的权重进行模型的学习)

深度学习对比机器学习能够实现端到端的模型,中间减少了人为的参与

深度学习的突破导致的技术革新:语音识别、图像识别、人脸识别、机器翻译、自动驾驶

深度学习爆发的原因:大数据、GPU

  • CPU:更少的核心,但是每个核心都很快,擅长处理序列化任务
  • GPU:更多的核心,每个核心都比较慢,更擅长处理并行任务

深度学习框架:

  • 1、命令式:代表pytorch,Facebook开源,动态图机制,能够构建非常灵活的网络结构的
  • 2、符号式:代表tensorflow,Google开源,静态图构建,良好的分布式部署

Git是什么?

Git是目前世界上最先进的分布式版本控制系统,能够随时记录代码的修改情况,便于:

  • 快速查找代码修改信息
  • 方便和其他人合作完成项目

git更多的使用是基于本地,如果在云端进行多人合作,那么久需要使用GitHub。

Github是运用Git的思想来工作、基于云端的商业网站,所有的开发真都可以在GitHub上常见和管理项目。

使用Github的好处

  • 方便管理自己的代码
  • 获得大量的开源代码
  • 构建良好的个人代码简历
  • 认识很多志同道合的朋友

Python 基础

  • 列表
x = [3, 1, 2] # 创建列表
  • 循环
animals = ['cat', 'dog', 'monkey']
for animal in animals:
  print(animal)
  • 字典:数据对(key, value)
d = {'cat':'cute', 'dog':'furry'}  # 创建字典
print(d['cat']) # 取出字典中的某个元素

向字典添加新元素

d['fish'] = 'wet'
print(d)
  • 函数(def定义, return返回结果)
def sign(x):
  if x > 0:
    return 'opsitive'
  elif x < 0:
    return 'negative'
  else:
    return 'zero'
  
  for x in [-1, 0, 1]:
    print(sign(x))
  • 类(类和实例,class定义类)
class Student(object):
  def __init__(self, name, score):
    self.name = name
    self.score = score

  def print_score(self):
    print('{}:{}'.format(self.name, self.score))

a = Student('mike', 99)
b = Student('lisa', 80)

a.print_score()
b.print_score()

Numpy

Numpy是python中扩展科学计算库, 其提高了一个高表现的、高维矩阵计算工具

import numpy as np # 引入numpy库
  • 科学计算
x = np.array([[1, 2], [3, 4]])
y = np.array([[5, 6], [7, 8]])

print(x + y)
print(x * y)

print(np.dot(x, y))

Matplotlib

这是Python中的画图工具,可以画2D的图像,也可以画3D图像

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 8, 0.1)
y = np.sin(x)

plt.plot(x, y)
plt.show()

在这里插入图片描述

Pillow

Pillow是Python中官方的图像处理库,有很多对图片的操作,使用pip install Pillow进行安装

from PIL import Image
img = Image.open('./jim.jpg')
img

在这里插入图片描述

img_array = np.array(img)
print(img_array)

能将图片转化为list

PyTorch

前身是Torch,是一个十分老牌、对多维矩阵进行操作的张量(Tensor)库,在机器学习和其他数学密集型应用有广泛应用,但由于其采用Lua,导致在国内一直很小众,如今使用Python语言强势归来,快速赢得了大量的使用者。

PyTorch提供了两种高层面的功能:

  • 使用强大的CPU加速Tensor计算(类似numpy)
  • 构建基于autograd系统的深度神经网络

所以使用PyTorch的原因:

  • 作为numpy的替代,以便是用强大的GPU
  • 将其作为一个提供最大灵活性和速度的深度学习研究平台

Tensor 定义

import torch
x1 = torch.Tensor([3, 4])
x2 = torch.FloatTensor([4, 4])
x3 = torch.randn(3, 4)

PyTorch与numpy之间的转换

import numpy as np

numpy_tensor = np.random.randn(10, 20)
# numpy->torch
pytorch_tensor = torch.from_numpy(numpy_tensor)
# torch->numpy
new_numpy_tensor = pytorch_tensor.numpy()

CPU tensor和CPU tensor之间的转换

import torch
x = torch.randn(3, 4)
print('x=', x)
# 将数据放到GPU上
x_gpu = x.cuda()
print('x_gpu=', x_gpu)
# 将数据从GPU搬回到CPU上
x_cpu = x_gpu.cpu()
print('x_cpu=', x_cpu)
# 将数据放到GPU上
x_gpu = x.cuda()
x_array = x_gpu.cpu().numpy()
print('x_array=', x_array)

Tensor的操作

  • 数据运算
x = torch.ones(3, 4)
y = torch.ones(3, 4)
z = torch.ones(4, 3)
# 矩阵和标量运算
k = x + 3 
print('k=\n', k)
k = torch.add(x, 3) 
print('k=\n', k)

# 矩阵和矩阵运算
k = x + y 
print('k=\n', k)
k = torch.add(x, y) 
print('k=\n', k)

k = torch.mm(x, z) 
print('k=\n', k)
  • 高级操作
x = torch.randn(4, 3)
# x.size() 和 x.shape效果一样
print(x.size())
print(x.shape)
# 矩阵的重新排列
print(x.view(3, 4))
print(x.view(12))
# 增加维度
torch.unsqueeze(x, dim=1)
x = x.unsqueeze(1)
x.shape
# 降低维度
torch.squeeze(x, dim=1)
x = x.squeeze(1)
x.shape
max_value, max_index = torch.max(x, dim=1) # 返回每行最大值得坐标和最大值
print(max_value, max_index)
max_value, max_index = x.max(1) # 和上面的语句一样
print(max_value, max_index)

Variable

为了构建神经网络,只适用Tensor还不够,这就引入了Variable。本质上Variable的操作和运算与Tensor是相同的, 唯一的区别就是Variable有三个属性

  • .data表示访问这个Variable中的Tensor
  • .grad表示取得其中的梯度(相当于导数)
  • .grad_fn表示如何得到这个Variable
from torch.autograd import Variable

x = Variable(torch.ones(2, 2), requires_grad=True)
y = Variable(torch.ones(2, 2), requires_grad=True)

z = torch.sum(x + y)
print(z.data)
z.backward()
print(x.grad)

Autograd(自动求导)

# 简单自动求导
x = Variable(torch.FloatTensor([2]), requires_grad=True)
z = (x + 2) ** 2
z.backward()
print(x.grad)
# 复杂自动求导
import torch
from torch.autograd import Variable
x = Variable(torch.randn(10, 20), requires_grad=True)
y = Variable(torch.randn(10, 5), requires_grad=True)
z = Variable(torch.randn(20, 5), requires_grad=True)

out = torch.mean(y - torch.matmul(x, z)) # torch.matmul()是矩阵的乘法
out.backward()

print(x.grad)
多次自动求导

通过调用backward可以进行一次自动求导,如果再次调用backward,会打线程序报错,没有办法再次求导。因为PyTorch默认做完一次自动求导之后,计算图就被丢弃,所以二次自动求导需要手动设置一个参在这里插入图片描述
数:.backward(retain_graph=True)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值