深度学习笔记-Python访问元素/list和tensor的转换/json处理

学习笔记

1.Python对访问元素的一些写法:
在这里插入图片描述
2.关于张量的定义与性质

3.跑代码时遇到的问题‘list’object has no attribute ‘cuda’
原因:列表list没有cuda属性,要转为tensor,另外tensor可以在GPU上运行,其他两个都不可以,这就是为什么你用GPU运行的时候有时会报不是tensor的错误,必须先转化为tensor。
还有,GPU上的tensor不能直接转为numpy,需要先放到CPU上

a=a.cpu()#放到CPU
a.numpy()#tensor->numpy
a=a.cuda()#放到GPU
#另一种写法
device=torch.device("cpu")
#device=torch.device("cuda")
a=torch.tensor([1,2])
a.to(device)#放到CPU
#a.to(device)     放到GPU

解决:list、numpy、tensor三者间如何转换

a=[[1,2],[3,4]]#list
print(a)
b=np.array(a)#list->numpy
print(b)
c=torch.tensor(a)#list->tensor
print(c)
print(b.tolist())#numpy->list
print(c.tolist())#tensor->list
print(torch.tensor(b))#numpy->tensor
print(torch.from_numpy(b))#同上
print(c.numpy())#tensor->numpy

特殊情况:如何将大小为1的张量转换为Python标量

a = torch.tensor([3.5])
a,a.item(),float(a),int(a)
#tensor类型:(tensor([3.5000]),numpy浮点数3.5,Python浮点数3.5,整形3

Python默认浮点数float64,但计算较慢,在深度学习中常用32位(np.float32)
Numpy中的浮点数:np.float、np.float64、np.float32
python中的float和np.float、np.float64都是C类型的double,它们三个是一样的。但是和np.float32不一样。
说明:
np.float64和python float精度一样。
np.float32和 np.float64是 numpy 特定的 32 位和 64 位浮点类型。
4.在这里插入图片描述

5.前向传播/运算:参数已知,计算输出值的过程。
反向传播(BP)神经网络训练方法
反向传播算法通过计算输出层结果与真实值之间的偏差(也叫损失)来逐层调节参数(通过优化方程进行求导,调整学习率找到最优值)
举例:
在这里插入图片描述
输出为y,损失函数为E。
在这里插入图片描述
假如某一时刻值如下:
在这里插入图片描述
那么我们可以计算E对Wh1的误差传播值为:
在这里插入图片描述
下次更新Wh1这个参数的时候就可以采用:
在这里插入图片描述
η就是学习率了,原理就是这样,一层一层推导下去就行了。
传统的BP神经网络有几个重大的缺陷。

(1) 首先是原理上的缺陷:BP神经网络仍然是有监督的传统机器学习方法,遵循着以下思路。
在这里插入图片描述
也就是说,不过是在最后面将SVM或者其他分类器换成神经网络,在大部分情况下其实没有什么优势,甚至增加了问题的复杂度。

提取的特征虽然是研究者们经过反复实验证明有效的特征,但仍然会一定程度上丢失了图像中的结构信息,从而丢失了一些对旋转扭曲等的不变性。而且要求输入的大小是固定的。为了学习到如偏移等微小的变化,需要有足够多的参数和足够多丰富的样本,最终学习到的权重,很可能在不同的位置处还会有非常相似的权重。

有人可能会说,直接把图像作为输入而不提取特征行不行?请接着往下看。

(2) 再一个就是结构上的缺陷:参数巨多,丢失空间信息。

全连接神经网络从BP算法提出开始,发展于90年代,那时候的计算机属于CPU时代,根本就无法撑起海量参数的计算。

如果一个隐藏层特征图像大小为100100,输入层的特征图像大小为100100,这意味着学习这一层需要100100100100=10^8的参数。如果以32位的浮点数进行存储,就需要4108的字节的存储量,约等于400MB的参数量。仅仅这样的一个网络层,其模型参数量已经超过了AlexNet网络的参数量,而100*100的特征图像分辨率,已经低于很多任务能够成功解决的下限。除了计算过程中需要存储的海量的参数,还有海量的计算,这些都超过了当时硬件的能力,因此大大限制了网络的大小,尤其是对于一些大的图像输入。

(引用自:AI初识境

6.softmax回归
虽然叫回归但适用于分类问题,使用了softmax运算中输出类别的概率分布。
7.多层感知机
在这里插入图片描述

  • 计划任务
  • 完成任务
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
根据提供的引用内容,出现了一个ImportError错误,错误信息为"/home/xi/.conda/envs/tensor/lib/python3.8/site-packages/tensorrt/tensorrt.so: undefined symbol: getBuilderPluginRegistry"。这个错误通常是由于缺少依赖或版本不匹配导致的。解决这个问题的思路如下: 1. 确保依赖已安装:首先,您需要确保所需的依赖已正确安装。在这种情况下,您需要确保TensorRT和相关的依赖已正确安装。您可以使用以下命令检查TensorRT是否已正确安装: ```shell pip list | grep tensorrt ``` 如果没有输出结果,则表示TensorRT未安装。您可以使用以下命令安装TensorRT: ```shell pip install tensorrt ``` 2. 检查版本兼容性:如果您已经安装了TensorRT,但仍然遇到该错误,可能是由于版本不兼容导致的。请确保您使用的TensorRT版本与您的代码和其他依赖项兼容。您可以查看TensorRT文档或与您使用的框架的官方文档进行比对,以确保版本兼容性。 3. 更新依赖:如果您已经安装了TensorRT并且版本兼容,但仍然遇到该错误,您可以尝试更新TensorRT和其他相关依赖项。使用以下命令更新TensorRT: ```shell pip install --upgrade tensorrt ``` 然后,重新运行您的代码,看看问题是否解决。 请注意,这只是一些解决ImportError错误的常见思路。具体解决方法可能因您的环境和代码而异。如果上述方法无法解决问题,请提供更多详细信息,以便我能够提供更准确的帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fuhanghang@yeah.net

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值