pytorch报错----------- ***ValueError: some of the strides of a given numpy array are negative.
最近遇到的一个pytorch报错:
然后报错了,这个几行代码就是从一个图片中读入数据,把bgr模式图片矩阵转换为rgb模式,这里采用的是改变矩阵索引,索引倒排 [..., ::-1] 。
看了这个报错有些懵,因为确实没想明白这么简单的操作都会报错。
后来查了查有些搞明白了,就是pytorch框架通过numpy的array对象生成tensor时要求传入的numpy的array对象是内存连续的。
如上述:
img = cv2.imread(r"timg.jpg") 得到一个内存连续的array 对象,但是
img = cv2.imread(r"timg.jpg")[...,::-1]
这时将得到的连续的array对象的最后一维索引倒排了,
这样的话倒排索引得到的array对象如果按照倒排后的索引来看就是内存不连续的,
这样传入pytorch中就会报错了。
这里的解决方法就是传入一个内存连续的array对象。
方法1.
import numpy as np
import torch
# 对彩色图片RGB 进行像素点的kmeans聚类
import cv2 img = cv2.imread(r"timg.jpg")[..., ::-1]
img2 = np.ascontiguousarray(img)
data = torch.from_numpy(img2).float() img[...]=0
print(img)
print(img2)
可以看到 调用
np.ascontiguousarray
我们得到的一个新的内存连续的array, 新旧array不共享内存。
方法2. 同理
import numpy as np
import torch
# 对彩色图片RGB 进行像素点的kmeans聚类
import cv2 img = cv2.imread(r"timg.jpg")[..., ::-1].copy()
data = torch.from_numpy(img).float()
直接对倒排索引的array对象进行 copy 操作,这样得到不共享内存的新的array对象, 新生成的array对象自然是内存连续的。
----------------------------------------------------------------------
为什么 pytorch 要求传入的numpy的array对象必须是内存连续的呢?
可以看:
https://blog.csdn.net/zz2230633069/article/details/93170271
https://zhuanlan.zhihu.com/p/59767914
https://www.cnblogs.com/peixu/articles/13455350.html
大致意思就是说内存连续的array或tensor对象在进行矩阵运算时速度更快。
-------------------------------------------------------------
参考:
https://blog.csdn.net/e01528/article/details/86067489
https://blog.csdn.net/qq_36891953/article/details/95482539
https://blog.csdn.net/u011622208/article/details/89707828
pytorch报错----------- ***ValueError: some of the strides of a given numpy array are negative.的更多相关文章
- pytorch报错:ValueError: Expected more than 1 value per channel when training, got input size torch.Size([1,512,1,1])
1.pytorch报错:ValueError: Expected more than 1 value per channel when training, got input size torch.S ...
- keras 报错 ValueError: Tensor conversion requested dtype int32 for Tensor with dtype float32: 'Tensor("embedding_1/random_uniform:0", shape=(5001, 128), dtype=float32)'
在服务器上训练并保存模型,复制到本地之后load_model()报错: ValueError: Tensor conversion requested dtype int32 for Tensor w ...
- matplotlib.pyplot import报错: ValueError: _getfullpathname: embedded null character in path
Environment: Windows 10, Anaconda 3.6 matplotlib 2.0 import matplotlib.pyplot 报错: ValueError: _getfu ...
- dbfread报错ValueError错误解决方法
问题 我在用dbfread处理.dbf数据的时候出现了报错 ValueError("could not convert string to float: b'.'",) 然后查找. ...
- Pytorch报错:cuda runtime error (59) : device-side assert triggered at /pytorch/aten/src/THC/generic/THCTensorMath.cu:26
Pytorch报错:cuda runtime error (59) : device-side assert triggered at /pytorch/aten/src/THC/generic/TH ...
- Anaconda 安装 pytorch报错解决方法
一.安装Pytorch: # -c 指定用pytorch镜像源下载软件conda install pytorch torchvision cpuonly -c pytorch 报错: 二.配置: ch ...
- moviepy音视频剪辑VideoClip类fl_image方法image_func报错ValueError: assignment destination is read-only解决办法
☞ ░ 前往老猿Python博文目录 ░ moviepy音视频剪辑模块的视频剪辑基类VideoClip的fl_image方法用于进行对剪辑帧数据进行变换. 调用语法:fl_image(self, im ...
- tensorflow-TFRecord报错ValueError: Protocol message Feature has no "feature" field.
编写代码用TFRecord数据结构存储数据集信息是报错:ValueError: Protocol message Feature has no "feature" field.或和 ...
- Pytorch 报错总结
目前在学习pytorch,自己写了一些例子,在这里记录下来一些报错及总结 1. RuntimeError: Expected object of type torch.FloatTensor but ...
- datetime.strptime格式转换报错ValueError
今天遇到一个报错:ValueError: time data '2018-10-10(Wednesday) AM0:50' does not match format '%Y-%m-%d(%A) %p ...
随机推荐
- C# .NET 操作Windows hosts
C# .NET 操作Windows hosts 工具类HostsUtil: using System; using System.IO; using System.Text; namespace Co ...
- Spring源码——ConfigurationClassPostProcessor类
引言 Spring容器中提供很多方便的注解供我们在工作中使用,比如@Configuration注解,里面可以在方法上定义@Bean注解,将调用方法返回的对象交由Bean容器进行管理,那么Spring框 ...
- Spring Boot 使用 拦截器 实现 token 验证
Spring Boot 使用 拦截器 实现 token 验证 整体思路:1.写一个工具类封装生成.校验和解析 token 的方法:2.在注册和登录时生成 token ,生成的 token 存入 red ...
- python rabbitmq官方文档demo
1.生产者 #!/usr/bin/env python import pika import json # https://www.rabbitmq.com/tutorials/tutorial-on ...
- .NET 个人博客-添加RSS订阅功能
个人博客-添加RSS订阅功能 前言 个人博客系列已经完成了 留言板 文章归档 推荐文章优化 推荐文章排序 博客地址:https://pljzy.top 然后博客开源的原作者也是百忙之中添加了一个名为R ...
- 【资料分享】基于TI Sitara系列AM3352/AM3354/AM3359核心板规格书
1 核心板简介 创龙科技SOM-TL335x-S是一款基于TI Sitara系列AM3352/AM3354/AM3359 ARM Cortex-A8高性能低功耗处理器设计的低成本工业级核心板,通过邮票 ...
- 都是全志T113处理器,“-i”和“-S3”有什么区别?
自9个月前,创龙科技"1片含税就79元"的全志T113-i双核ARM Cortex-A7@1.2GHz的工业核心板(SOM-TLT113)推出之后,不少嵌入式软硬件工程师.用户都咨 ...
- 2023年台州市初赛Misc
2023年台州市初赛Misc 这是神马 冰蝎流量,找到key <?php @error_reporting(0); session_start(); $key="144a6b22963 ...
- 解码技术债:AI代码助手与智能体的革新之道
技术债 技术债可能来源于多种原因,比如时间压力.资源限制.技术选型不当等.它可以表现为代码中的临时性修补.未能彻底解决的设计问题.缺乏文档或测试覆盖等.虽然技术债可以帮助快速推进项目进度,但长期来看, ...
- 0. 什么是C++
什么是C++ 是C语言的扩展,有如下的两个特性: 关注性能 与底层硬件紧密结合 对象生命周期精确控制 零成本抽象(Zero-overhead Abstraction) 引入大量利于工程实践的特性 三种 ...