AssertionError assert I.ndim == 4 and I.shape[1] == 3

2023-11-06 10:30

本文主要是介绍AssertionError assert I.ndim == 4 and I.shape[1] == 3,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

运行代码:

import torch
import torchvision
from torch import nn
from torch.nn import Conv2d
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriterdataset = torchvision.datasets.CIFAR10("CIFAR10",train=False,transform=torchvision.transforms.ToTensor(),download=True)
# 注意dataset中transform参数接收的是个对象,所以要加上括号,还有就是之后使用神经网络进行运算的时候需要的数据类型是tensor类型,所以transforms参数要加上。
dataloader = DataLoader(dataset,batch_size=64)# 搭建一个简单的网络
class Booze(nn.Module):# 继承nn.Module的初始化def __init__(self):super().__init__()# 注意这里是创建一个全局变量所以要加上一个self  当out_channels远大于in_channels时需要对原图像进行扩充,也就是padding的值不能设为0了,需要根据公式self.conv1 = Conv2d(in_channels=3,out_channels=6,kernel_size=(3),stride=1,padding=0)# 重写forward函数def forward(self,x):x = self.conv1(x)return x# 初始化网络
obj = Booze()
# 查看网络
print(obj)
'''
Booze((conv1): Conv2d(3, 6, kernel_size=(3, 3), stride=(1, 1))
)
'''writer = SummaryWriter("logs")
step = 0for data in dataloader:imgs,targets = dataoutput = obj(imgs)# torch.Size([64, 3, 32, 32])  64张3通道32X32的图片print(imgs.shape)# torch.Size([64, 6, 30, 30]) 64张6通道30X30的图片print(output.shape)# 使用tensorboard可视化 注意多张图片是要使用add_images而不是add_imagewriter.add_images("input",imgs,step)# 由于output是6通道数的无法显示,直接可视化会报错,所以我们需要对output进行reshape    reshape的第二参数中当一个数未知时,你可以填入-1,他会自动帮你计算,为什么会未知呢?因为就是不知道填多少,填64的话肯定不行吧,然后改变通道数相当于把多余的像素给切出来了writer.add_images("output",output,step)step+=1writer.close()

运行代码报错如下:
在这里插入图片描述
为什么会出错呢?
原因是我们搭建的神经网络中self.conv1 = Conv2d(in_channels=3,out_channels=6,kernel_size=(3),stride=1,padding=0)
其中out_channels=6就是输出图片的通道数是6通道的,6通道数的图片无法显示,直接使用tensorboard可视化会报错,报错的就是上述代码中的writer.add_images("output",output,step)这一行代码,所以在执行这行代码前需要对output进行reshape,reshape成3通道数的图片。
解决方案
output = torch.reshape(output,(-1,3,30,30))这一行代码添加到writer.add_images("output",output,step)之前,reshape的第二参数中当一个数未知时,你可以填入-1,他会自动帮你计算,为什么会未知呢?因为就是不知道填多少,填64的话肯定不行吧,然后改变通道数相当于把多余的像素给切出来了,放到了batch_size中。

# (-1,3,30,30) = (batch_size,channels,H,W)
output = torch.reshape(output,(-1,3,30,30))
writer.add_images("output",output,step)

这篇关于AssertionError assert I.ndim == 4 and I.shape[1] == 3的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/356085

相关文章

C/C++ 中的assert()宏 断言机制

ASSERT()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE (0), 程序将报告错误,并终止执行。如果表达式不为0,则继续执行后面的语句。这个宏通常原来判断程序中是否出现了明显非法的数据,如果出现了终止程序以免导致严重后果,同时也便于查找错误。   原型定义: #include <assert.h> void assert( int expre

android xml之Drawable 篇 --------shape和selector和layer-list的

转自 : http://blog.csdn.net/brokge/article/details/9713041 <shape>和<selector>在Android UI设计中经常用到。比如我们要自定义一个圆角Button,点击Button有些效果的变化,就要用到<shape>和<selector>。 可以这样说,<shape>和<selector>在美化控件中的作用是至关重要。 在

Android shape 图形

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <!-- "oval","rectangle", "line","ring" 形状--><!-- 圆角 --><cornersandroid

tensorflow shape,reshape

图解TensorFlow中Tensor的shape概念与tf op: tf.reshape_田海立@CSDN-CSDN博客《图解NCHW与NHWC数据格式》中从逻辑表达和物理存储角度用图的方式讲述了NHWC与NCHW两种数据格式,数据shape是可以改变的,本文介绍TensorFlow里Tensor的Shape概念,并用图示

Numpy中type()、ndim、shape、size、dtype、astype的用法

目录 numpy基础介绍示例分析及总结:itemsize、nbytes函数 numpy基础介绍 Numpy 补充了Python语言所欠缺的数值计算能力,是其它数据分析及机器学习库的底层库。因其完全标准C语言实现,运行效率充分优化。最重要一点是开源免费。numpy的核心是矩阵(即多维数组)。 示例 import numpy as nparr =np.array([[1,2,3]

Junit、Assert、内省、Properties类与配置文件的使用

Junit Junit有什么用 可以不写main方法直接对方法进行测试 怎么使用 1、导入junit.jar包 2、加入@Test注释 3、例子如下 import org.junit.Test;public class Demo1 {@Testpublic void fun(){System.out.println("Junit测试");}} 使用规范 一个类如果需要测试,那

Android Selector和Shape的使用方法

本文介绍下背景选择器、文字颜色选择器、背景渐变器的实现。结合Shape来实现背景渐变效果。或者只是以color代替drawable作为背景选择器的元素 1.背景选择器(位于res/drawable/,使用方法:android:background=”@drawable/XXX”) 复制代码 代码如下: <?xml version="1.0" encod

不可不知的WPF形状(Shape)

在WPF开发中经常需要进行绘制图形,可以利用Shape类型绘制基本的形状,而且Shape派生自FrameworkElement,属于UI元素范畴,可以直接利用XAML进行绘制。本文通过一些简单的小例子,简述如何通过Shape类绘制形状,仅供学习分享使用,如有不足之处,还请指正。 Shape类位于System.Windows.Shapes命名空间,而上篇文章介绍的Brush位于System.W

Error when checking model target: expected activation_2 to have shape (None, 10) but got array with

我遇到了这个问题,因为我在用reshape层后,忘了改我的GT label的尺寸。 reshape最终的输出是10长度的,但是标签用的还是1长度的 就是(0,0,1,0,0,0,0,...)与3的不匹配

使用shape画虚线

在Android中使用shape画虚线,一定要加上 android:layerType="software"这句话,不然显示的就是直线 画虚线的 beijing_xuxian_black.xml文件 <?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/ap