Pytorch의 텐서 데이터 구조의 자세한 예
【관련 추천: Python3 동영상 튜토리얼】
torch.Tensor
torch.Tensor
는 단일 데이터 유형 요소를 포함하는 다차원 행렬입니다. , numpy의 배열
과 유사합니다.
Python의 목록 또는 시퀀스 데이터를 변환하기 위해 torch.tensor()를 사용하여 Tensor를 생성할 수 있습니다. 생성된 것은 dtype
이고 기본값은 torch입니다. FloatTensor
. torch.Tensor
是一种包含单一数据类型元素的多维矩阵,类似于 numpy 的 array
。
Tensor 可以使用 torch.tensor() 转换 Python 的 list 或序列数据生成,生成的是dtype
默认是 torch.FloatTensor
。
注意
torch.tensor()
总是拷贝 data。如果你有一个 Tensor data 并且仅仅想改变它的requires_grad
属性,可用requires_grad_()
或者detach()
来避免拷贝。如果你有一个numpy
数组并且想避免拷贝,请使用torch.as_tensor()
。
1,指定数据类型的 Tensor 可以通过传递参数 torch.dtype
和/或者 torch.device
到构造函数生成:
注意为了改变已有的 tensor 的 torch.device 和/或者 torch.dtype, 考虑使用
to()
方法.
>>> torch.ones([2,3], dtype=torch.float64, device="cuda:0") tensor([[1., 1., 1.], [1., 1., 1.]], device='cuda:0', dtype=torch.float64) >>> torch.ones([2,3], dtype=torch.float32) tensor([[1., 1., 1.], [1., 1., 1.]])
2,Tensor 的内容可以通过 Python索引或者切片访问以及修改:
>>> matrix = torch.tensor([[2,3,4],[5,6,7]]) >>> print(matrix[1][2]) tensor(7) >>> matrix[1][2] = 9 >>> print(matrix) tensor([[2, 3, 4], [5, 6, 9]])
3,使用 torch.Tensor.item()
或者 int()
方法从只有一个值的 Tensor中获取 Python Number:
>>> x = torch.tensor([[4.5]]) >>> x tensor([[4.5000]]) >>> x.item() 4.5 >>> int(x) 4
4,Tensor可以通过参数 requires_grad=True
创建, 这样 torch.autograd
会记录相关的运算实现自动求导:
>>> x = torch.tensor([[1., -1.], [1., 1.]], requires_grad=True) >>> out = x.pow(2).sum() >>> out.backward() >>> x.grad tensor([[ 2.0000, -2.0000], [ 2.0000, 2.0000]])
5,每一个 tensor都有一个相应的 torch.Storage
保存其数据。tensor 类提供了一个多维的、strided 视图, 并定义了数值操作。
Tensor 数据类型
Torch 定义了七种 CPU tensor 类型和八种 GPU tensor 类型:
torch.Tensor
是默认的 tensor 类型(torch.FloatTensor
)的简称,即 32
位浮点数数据类型。
Tensor 的属性
Tensor 有很多属性,包括数据类型、Tensor 的维度、Tensor 的尺寸。
- 数据类型:可通过改变 torch.tensor() 方法的 dtype 参数值,来设定不同的 tensor 数据类型。
- 维度:不同类型的数据可以用不同维度(dimension)的张量来表示。标量为 0 维张量,向量为 1 维张量,矩阵为 2 维张量。彩色图像有 rgb 三个通道,可以表示为 3 维张量。视频还有时间维,可以表示为 4 维张量,有几个中括号 [ 维度就是几。可使用 dim() 方法 获取 tensor 的维度。
- 尺寸:可以使用 shape属性或者 size()方法查看张量在每一维的长度,可以使用 view()方法或者reshape() 方法改变张量的尺寸。
样例代码如下:
matrix = torch.tensor([[[1,2,3,4],[5,6,7,8]], [[5,4,6,7], [5,6,8,9]]], dtype = torch.float64) print(matrix) # 打印 tensor print(matrix.dtype) # 打印 tensor 数据类型 print(matrix.dim()) # 打印 tensor 维度 print(matrix.size()) # 打印 tensor 尺寸 print(matrix.shape) # 打印 tensor 尺寸 matrix2 = matrix.view(4, 2, 2) # 改变 tensor 尺寸 print(matrix2)
程序输出结果如下:
view 和 reshape 的区别
两个方法都是用来改变 tensor 的 shape,view() 只适合对满足连续性条件(contiguous
)的 tensor 进行操作,而 reshape() 同时还可以对不满足连续性条件的 tensor 进行操作。在满足 tensor 连续性条件(contiguous
)时,a.reshape() 返回的结果与a.view() 相同,都不会开辟新内存空间;不满足 contiguous
时, 直接使用 view() 方法会失败,reshape()
依然有用,但是会重新开辟内存空间,不与之前的 tensor 共享内存,即返回的是 ”副本“(等价于先调用 contiguous()
方法再使用 view()
方法)。
更多理解参考这篇文章
Tensor 与 ndarray
1,张量和 numpy 数组。可以用 .numpy()
方法从 Tensor 得到 numpy 数组,也可以用 torch.from_numpy
从 numpy 数组得到Tensor。这两种方法关联的 Tensor 和 numpy 数组是共享数据内存的。可以用张量的 clone
方法拷贝张量,中断这种关联。
arr = np.random.rand(4,5) print(type(arr)) tensor1 = torch.from_numpy(arr) print(type(tensor1)) arr1 = tensor1.numpy() print(type(arr1)) """ <class 'numpy.ndarray'> <class 'torch.Tensor'> <class 'numpy.ndarray'> """
2,item()
方法和 tolist()
🎜1 지정된 데이터 유형의 Tensor는torch.tensor()
는 항상 데이터를 복사한다는 점에 유의하세요. Tensor 데이터가 있고requires_grad
속성만 변경하려는 경우requires_grad_()
또는detach()
를 사용하여 복사를 방지하세요.numpy
배열이 있고 복사를 방지하려면torch.as_tensor()
를 사용하세요. 🎜
torch.dtype
및/또는 torch.device
매개변수를 생성자에 전달하여 생성할 수 있습니다. 🎜< blockquote>🎜 기존 텐서의 torch.device 및/또는 torch.dtype을 변경하려면 to()
메서드 사용을 고려하세요.🎜# item方法和tolist方法可以将张量转换成Python数值和数值列表 scalar = torch.tensor(5) # 标量 s = scalar.item() print(s) print(type(s)) tensor = torch.rand(3,2) # 矩阵 t = tensor.tolist() print(t) print(type(t)) """ 1.0 <class 'float'> [[0.8211846351623535, 0.20020723342895508], [0.011571824550628662, 0.2906131148338318]] <class 'list'> """
>>> torch.rand([1,1,3,3]) tensor([[[[0.3005, 0.6891, 0.4628], [0.4808, 0.8968, 0.5237], [0.4417, 0.2479, 0.0175]]]]) >>> torch.normal(2, 3, size=(1, 4)) tensor([[3.6851, 3.2853, 1.8538, 3.5181]]) >>> torch.full([2, 2], 4) tensor([[4, 4], [4, 4]]) >>> torch.arange(0,10,2) tensor([0, 2, 4, 6, 8]) >>> torch.eye(3,3) tensor([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]])
torch.Tensor.item()
또는 int()
메서드 사용 Strong>값이 하나만 있는 Tensor Python 번호 가져오기: 🎜rrreee🎜4, Tensor는 requires_grad=True
매개변수를 사용하여 생성할 수 있으므로 torch.autograd</code > 자동 파생을 달성하기 위해 관련 작업을 기록합니다: 🎜rrreee🎜5 , 각 텐서에는 데이터를 저장하기 위한 해당 <code>torch.Storage
가 있습니다. 텐서 클래스는 다차원적인 스트라이드 뷰를 제공하고 수치 연산을 정의합니다. 🎜🎜Tensor 데이터 유형🎜🎜Torch는 7개의 CPU 텐서 유형과 8개의 GPU 텐서 유형을 정의합니다. 🎜🎜🎜
torch.Tensor
는 기본 텐서 유형입니다(torch.FloatTensor< /code> ), 즉 <code>32
비트 부동 소수점 데이터 유형입니다. 🎜🎜Tensor의 속성🎜🎜Tensor에는 데이터 유형, Tensor 차원 및 Tensor 크기를 포함한 많은 속성이 있습니다. 🎜
- 데이터 유형: torch.tensor() 메소드의 dtype 매개변수 값을 변경하여 다양한 텐서 데이터 유형을 설정할 수 있습니다.
- 차원: 다양한 유형의 데이터를 다양한 차원의 텐서로 표현할 수 있습니다. 스칼라는 0차원 텐서, 벡터는 1차원 텐서, 행렬은 2차원 텐서입니다. 컬러 이미지는 RGB, 3개의 채널을 가지며 3차원 텐서로 표현될 수 있습니다. 비디오에도 시간 차원이 있는데, 이는 여러 개의 대괄호가 포함된 4차원 텐서로 표현될 수 있습니다. [차원은 몇 개입니다. 텐서의 차원은 Dim() 메서드를 사용하여 얻을 수 있습니다.
- 크기: 텐서의 각 차원의 길이를 보려면 Shape 속성이나 size() 메서드를 사용할 수 있으며, view() 메서드나 reshape() 메서드를 사용하여 크기를 변경할 수 있습니다. 텐서의 크기.
🎜
🎜🎜보기와 모양 변경의 차이점🎜 🎜두 방법 모두 동일합니다. 텐서의 모양을 변경하는 데 사용됩니다. view()는 연속성 조건(인접
)을 충족하는 텐서를 작동하는 데만 적합하지만 reshape()도 작동할 수 있습니다. 연속성 조건을 충족하지 않는 텐서. 텐서 연속성 조건(연속
)이 충족되면 a.reshape()에서 반환된 결과는 a.view()와 동일하며 인 경우 새 메모리 공간이 열리지 않습니다. 연속적인
이 충족되지 않으면, view() 메서드를 직접 사용하는 것은 실패합니다. reshape()
는 여전히 유용하지만 메모리 공간을 다시 열고 공유하지 않습니다. 즉, "" "의 복사본을 반환합니다(contiguous()
메서드를 먼저 호출한 다음 뷰를 사용하는 것과 같습니다). ()
메소드).
더 자세한 내용은 이 기사🎜🎜Tensor 및 ndarray🎜🎜1, tensor 및 numpy 배열을 참조하세요. .numpy()
메서드를 사용하여 Tensor에서 numpy 배열을 가져오거나 torch.from_numpy
를 사용하여 numpy 배열에서 Tensor를 가져올 수 있습니다. 이 두 가지 방법과 관련된 Tensor 및 numpy 배열은 데이터 메모리를 공유합니다. 텐서의 clone
메소드를 사용하여 텐서를 복사하고 이 연결을 끊을 수 있습니다. 🎜rrreee🎜2, item()
메서드와 tolist()
메서드는 텐서를 Python 숫자와 숫자 목록으로 변환할 수 있습니다🎜
# item方法和tolist方法可以将张量转换成Python数值和数值列表 scalar = torch.tensor(5) # 标量 s = scalar.item() print(s) print(type(s)) tensor = torch.rand(3,2) # 矩阵 t = tensor.tolist() print(t) print(type(t)) """ 1.0 <class 'float'> [[0.8211846351623535, 0.20020723342895508], [0.011571824550628662, 0.2906131148338318]] <class 'list'> """
创建 Tensor
创建 tensor ,可以传入数据或者维度,torch.tensor() 方法只能传入数据,torch.Tensor() 方法既可以传入数据也可以传维度,强烈建议 tensor() 传数据,Tensor() 传维度,否则易搞混。
传入维度的方法
方法名 | 方法功能 | 备注 |
---|---|---|
torch.rand(*sizes, out=None) → Tensor | 返回一个张量,包含了从区间 [0, 1) 的均匀分布中抽取的一组随机数。张量的形状由参数sizes定义。 | 推荐 |
torch.randn(*sizes, out=None) → Tensor | 返回一个张量,包含了从标准正态分布(均值为0,方差为1,即高斯白噪声)中抽取的一组随机数。张量的形状由参数sizes定义。 | 不推荐 |
torch.normal(means, std, out=None) → Tensor | 返回一个张量,包含了从指定均值 means 和标准差 std 的离散正态分布中抽取的一组随机数。标准差 std 是一个张量,包含每个输出元素相关的正态分布标准差。 | 多种形式,建议看源码 |
torch.rand_like(a) | 根据数据 a 的 shape 来生成随机数据 | 不常用 |
torch.randint(low=0, high, size) | 生成指定范围(low, hight )和 size 的随机整数数据 | 常用 |
torch.full([2, 2], 4) | 生成给定维度,全部数据相等的数据 | 不常用 |
torch.arange(start=0, end, step=1, *, out=None) | 生成指定间隔的数据 | 易用常用 |
torch.ones(*size, *, out=None) | 生成给定 size 且值全为1 的矩阵数据 | 简单 |
zeros()/zeros_like()/eye() | 全 0 的 tensor 和 对角矩阵 | 简单 |
样例代码:
>>> torch.rand([1,1,3,3]) tensor([[[[0.3005, 0.6891, 0.4628], [0.4808, 0.8968, 0.5237], [0.4417, 0.2479, 0.0175]]]]) >>> torch.normal(2, 3, size=(1, 4)) tensor([[3.6851, 3.2853, 1.8538, 3.5181]]) >>> torch.full([2, 2], 4) tensor([[4, 4], [4, 4]]) >>> torch.arange(0,10,2) tensor([0, 2, 4, 6, 8]) >>> torch.eye(3,3) tensor([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]])
【相关推荐:Python3视频教程 】
위 내용은 Pytorch의 텐서 데이터 구조의 자세한 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











이 기사는 데비안 시스템에서 Apache Logs를 분석하여 웹 사이트 성능을 향상시키는 방법을 설명합니다. 1. 로그 분석 기본 사항 Apache Log는 IP 주소, 타임 스탬프, 요청 URL, HTTP 메소드 및 응답 코드를 포함한 모든 HTTP 요청의 자세한 정보를 기록합니다. 데비안 시스템 에서이 로그는 일반적으로 /var/log/apache2/access.log 및 /var/log/apache2/error.log 디렉토리에 있습니다. 로그 구조를 이해하는 것은 효과적인 분석의 첫 번째 단계입니다. 2. 로그 분석 도구 다양한 도구를 사용하여 Apache 로그를 분석 할 수 있습니다.

Python은 게임 및 GUI 개발에서 탁월합니다. 1) 게임 개발은 Pygame을 사용하여 드로잉, 오디오 및 기타 기능을 제공하며 2D 게임을 만드는 데 적합합니다. 2) GUI 개발은 Tkinter 또는 PYQT를 선택할 수 있습니다. Tkinter는 간단하고 사용하기 쉽고 PYQT는 풍부한 기능을 가지고 있으며 전문 개발에 적합합니다.

PHP와 Python은 각각 고유 한 장점이 있으며 프로젝트 요구 사항에 따라 선택합니다. 1.PHP는 웹 개발, 특히 웹 사이트의 빠른 개발 및 유지 보수에 적합합니다. 2. Python은 간결한 구문을 가진 데이터 과학, 기계 학습 및 인공 지능에 적합하며 초보자에게 적합합니다.

데비안 시스템의 readdir 함수는 디렉토리 컨텐츠를 읽는 데 사용되는 시스템 호출이며 종종 C 프로그래밍에 사용됩니다. 이 기사에서는 ReadDir를 다른 도구와 통합하여 기능을 향상시키는 방법을 설명합니다. 방법 1 : C 언어 프로그램을 파이프 라인과 결합하고 먼저 C 프로그램을 작성하여 readDir 함수를 호출하고 결과를 출력하십시오.#포함#포함#포함#포함#includinTmain (intargc, char*argv []) {dir*dir; structdirent*entry; if (argc! = 2) {

이 기사에서는 DDOS 공격 탐지 방법에 대해 설명합니다. "Debiansniffer"의 직접적인 적용 사례는 발견되지 않았지만 DDOS 공격 탐지에 다음과 같은 방법을 사용할 수 있습니다. 효과적인 DDOS 공격 탐지 기술 : 트래픽 분석을 기반으로 한 탐지 : 갑작스런 트래픽 성장, 특정 포트에서의 연결 감지 등의 비정상적인 네트워크 트래픽 패턴을 모니터링하여 DDOS 공격을 식별합니다. 예를 들어, Pyshark 및 Colorama 라이브러리와 결합 된 Python 스크립트는 실시간으로 네트워크 트래픽을 모니터링하고 경고를 발행 할 수 있습니다. 통계 분석에 기반한 탐지 : 데이터와 같은 네트워크 트래픽의 통계적 특성을 분석하여

제한된 시간에 Python 학습 효율을 극대화하려면 Python의 DateTime, Time 및 Schedule 모듈을 사용할 수 있습니다. 1. DateTime 모듈은 학습 시간을 기록하고 계획하는 데 사용됩니다. 2. 시간 모듈은 학습과 휴식 시간을 설정하는 데 도움이됩니다. 3. 일정 모듈은 주간 학습 작업을 자동으로 배열합니다.

이 기사에서는 Debian 시스템에서 NginxSSL 인증서를 업데이트하는 방법에 대해 안내합니다. 1 단계 : CertBot을 먼저 설치하십시오. 시스템에 CERTBOT 및 PYTHON3-CERTBOT-NGINX 패키지가 설치되어 있는지 확인하십시오. 설치되지 않은 경우 다음 명령을 실행하십시오. sudoapt-getupdatesudoapt-getinstallcertbotpython3-certbot-nginx 2 단계 : 인증서 획득 및 구성 rectbot 명령을 사용하여 nginx를 획득하고 nginx를 구성하십시오.

데비안 시스템에서 HTTPS 서버를 구성하려면 필요한 소프트웨어 설치, SSL 인증서 생성 및 SSL 인증서를 사용하기 위해 웹 서버 (예 : Apache 또는 Nginx)를 구성하는 등 여러 단계가 포함됩니다. 다음은 Apacheweb 서버를 사용하고 있다고 가정하는 기본 안내서입니다. 1. 필요한 소프트웨어를 먼저 설치하고 시스템이 최신 상태인지 확인하고 Apache 및 OpenSSL을 설치하십시오 : Sudoaptupdatesudoaptupgradesudoaptinsta
