Tensorflow VS Pytorch基础语法与操作

深度学习框架学习系列:Tensorflow VS Pytorch基础语法与操作


文章目录

  • 深度学习框架学习系列:Tensorflow VS Pytorch基础语法与操作
  • 前言
  • 一、Tensorflow
    • 1.1.常量(tf.constant())
      • 1.1.1.常量的表示
      • 1.1.2.常量的操作
    • 1.2.变量(tf.Variable)
    • 1.3.Tensorflow的数学运算
  • 二、Pytorch的基本操作
    • 2.1.张量介绍
    • 2.2.张量运算


前言

本文是列举并比较了目前最火的两大深度学习框架(Tensorflow和Pytorch)的基础语法


小插曲
查看我们电脑上的tensorflow版本(我一般都是在jupyter操作)

import tensorflow as tf
tf.__version__

查询tensorflow安装路径为:

tf.__path__

一、Tensorflow

tensor可以看作是一个独立的语言

1.1.常量(tf.constant())

1.1.1.常量的表示

a=tf.constant(1)
或者
b=tf.constant([[1,2,3],[4,5,6]])

如果想取出常量的值,可以用

`a.numpy()

tensorflow可以像numpy一样进行切片和索引

  • 索引
b[1.1]
#注:如果想取出其中的值可以用
b[1,1].numpy()
  • 切片
b[:,1:]
#tensorflow特有的写法
a[...,1:]#...表示逗号之前所有的维度
如果a是三维,也可以表示为a[:,:,1:],不过有点麻烦!!

1.1.2.常量的操作

#直接修改内部的值会报错
比如:a[0,1]=20

#tensor和ndarray的转化
1.tensor->ndarray
a.numpy
2.ndarray->tensor
tf.constant(a)

1.2.变量(tf.Variable)

与常量不同,变量内部的值是可以改变的

c=tf.Variable([[1,2,3],[3,4,5]])
#转化为numpy
c.numpy
#返回的是变量值创建的tensor
c.value()
#变量的赋值(必须通过assign的方法)
c.assign(c*2)相当于c=c*2
#也可以这样操作
c[0,1].assign(5)/c[1].assign([7,8,9])

1.3.Tensorflow的数学运算

两者方式:1.python自带的运算符;2.tensorflow封装的数学运算函数

a+b等同于tf.add(a,b)
a-b等同于tf.subtract(a,b)
a*b等同于tf.multiply(a,b)
a/b等同于tf.divide(a,b)

矩阵操作

如果按列进行求和
a.sum(axis=0)等同于tf.reduce_sum(a.axis=0)
tf.reduce_sum(a)将张量中的所有元素相加

如果将tensor转化为numpy
tf.reduce_sum(a.axis=1).numpy

矩阵的乘法(点乘)
tf.matmul(x,y)
#注:@符号可以表示矩阵的点乘

二、Pytorch的基本操作

Pytorch最基本的操作对象是张量(与tensorflow相同),它表示一个多维矩阵.

2.1.张量介绍

torch.tensor([6, 2],dtype=torch.int32)
torch.tensor(np.array([1, 2, 3]))
#torch.tensor()括号里面可以是列表、元组和ndarray 

注意这边的dtype写法还是跟tensorflow有点区别的

与ndarray类似, pytorch也有很多快捷的方法用来创建张量.

import torch

# 创建一个[0, 1)之间的随机均匀分布
x = torch.rand(2, 3)

# 创建一个标准正态分布
x = torch.randn(2, 3)

# 创建全是0的tensor
x = torch.zeros(2, 3)

# 创建全是1的tensor
x = torch.ones(2, 3)

如何去得到张量的大小

x = torch.ones(2, 3, 4)
x.shape
# 输出 torch.size([2, 3, 4])
x.size()
# 输出 torch.size([2, 3, 4])
x.size(0)
# 输出 2

pytorch中的tensor有以下基本数据类型

数据类型 pytorch语法表示
32位浮点型 torch.float32
64位整型 torch.int64
64位浮点型 torch.float64
32位整型 torch.int32
16位整型 torch.int16

举个例子

x = torch.tensor([6, 2], dtype=torch.float32)
# 通过.type转换数据类型
x.type(torch.int64)

注:tensorflow不能直接使用tensor方法去创建tensor

torch与ndarray的转化

  • ndarray->torch:
    通过from_numpy可以把ndarray转化为tensor
a = np.random.randn(2, 3)
x1=torch.from_numpy(a)
  • torch->ndarray:
    tensor通过numpy也可以转化为ndarray
x1.numpy()

2.2.张量运算

先申明两个张量对象

x = torch.ones(2, 3)
x1=torch.from_numpy(np.random.randn(2, 3))

和单个数字运算, tensor中每个元素分别和这个数字运算

x + 3

output:
tensor([[4., 4., 4.],
        [4., 4., 4.]], dtype=torch.float64)

两个形状相同的tensor进行运算, 对应位置元素分别运算.

方法1:直接相加
x + x1
方法2:调用pytorch的运算方法
x.add(x1)

值得一提的是,加了下划线表示对x本来的值进行修改

x.add_(x1)

改变tensor的形状, 使用.view, 相当于numpy中的reshape

x.view(3, 2)
x.view(-1, 1)#类比reshape(-1,1)

聚合操作

  • 取平均
 x.mean()
  • 求和
x.sum()

指定维度进行求和,如果不设置,默认对所有元素进行求和
x.sum(dim=1)

如果我们想取出单个元素的张量中的值,可以使用.item()

x.sum().item()

pytorch中的切片和索引操作与ndarray是一致的

矩阵操作

  • 普通矩阵乘法
方法1:torch.matmul(matrix1,matrix2)

方法2:matrix1@matrix2
  • 矩阵点乘
matrix3.dot(matrix4)
注:matrix3和matrix4的大小必须相同

你可能感兴趣的:(深度学习框架,pytorch,tensorflow,深度学习)