pytorch搭建卷积神经网络【第六课_tensor_图像数据操作】


前言

案例代码:github:https://github.com/2012Netsky/pytorch_cnn/blob/main/2_named_tensors.ipynb

一、创建特定tensor

#!/usr/bin/env python
# coding: utf-8

# In[5]:
import torch
_ = torch.tensor([0.2126, 0.7152, 0.0722], names=['c'])

# In[6]:
img_t = torch.randn(3, 5, 5) # shape [channels, rows, columns]
weights = torch.tensor([0.2126, 0.7152, 0.0722])

# In[7]:
batch_t = torch.randn(2, 3, 5, 5) # shape [batch, channels, rows, columns]

在这里插入图片描述

二、计算tensor均值

# In[8]:
img_gray_naive = img_t.mean(-3)       #在倒数第三个维度上取均值
batch_gray_naive = batch_t.mean(-3)   #在倒数第三个维度上取均值
img_gray_naive.shape, batch_gray_naive.shape

# In[19]:
print(img_gray_naive)

在这里插入图片描述

三、tensor维度编辑及tensor乘法

# In[10]:
weights.size()

# In[11]:
weights.shape

# In[12]:
weights

# In[13]:
weights.unsqueeze(-1)

# In[14]:
weights.unsqueeze(-1).unsqueeze_(-1)

# In[15]:
img_t

# In[16]:
img_t * weights.unsqueeze(-1).unsqueeze_(-1)

# In[18]:
print(img_t.shape)
print((weights.unsqueeze(-1)).shape)
print((weights.unsqueeze(-1).unsqueeze_(-1)).shape)
print((img_t * weights.unsqueeze(-1).unsqueeze_(-1)).shape)
# unsqueeze_(-1)在tensor最后一个维度上再增加一个维度
# 高维矩阵相乘 保证前面维度相同 后面两个维度的矩阵相乘相当于二维矩阵相乘

# In[21]:
unsqueezed_weights = weights.unsqueeze(-1).unsqueeze_(-1)
img_weights = (img_t * unsqueezed_weights)
print(img_t.shape)
print(unsqueezed_weights.shape)
print((img_t * unsqueezed_weights).shape)

batch_weights = (batch_t * unsqueezed_weights)
print(batch_t.shape)
print(unsqueezed_weights.shape)
print((batch_t * unsqueezed_weights).shape)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、tensor维度合并

img_gray_weighted = img_weights.sum(-3)
print(img_gray_weighted )  #一张图片
batch_gray_weighted = batch_weights.sum(-3)
print(batch_gray_weighted) # 两张图片
batch_weights.shape, batch_t.shape, unsqueezed_weights.shape


# In[25]:
img_gray_weighted_fancy = torch.einsum('...chw,c->...hw', img_t, weights)
batch_gray_weighted_fancy = torch.einsum('...chw,c->...hw', batch_t, weights)
img_gray_weighted_fancy.shape ,batch_gray_weighted_fancy.shape


# In[26]:
weights_named = torch.tensor([0.2126, 0.7152, 0.0722], names=['channels'])
weights_named

在这里插入图片描述

五、添加名称 又不改变现有名称

# In[27]:
# 添加名称 又不改变现有名称
img_named =  img_t.refine_names(..., 'channels', 'rows', 'columns')
batch_named = batch_t.refine_names(..., 'channels', 'rows', 'columns')
print("img named:", img_named.shape, img_named.names)
print("batch named:", batch_named.shape, batch_named.names)

在这里插入图片描述

六、自动维度对其功能 返回张量 补全缺失的维度

# In[28]:
# 自动维度对其功能 返回张量 补全缺失的维度
weights_aligned = weights_named.align_as(img_named)
weights_aligned.shape, weights_aligned.names

在这里插入图片描述

七、接受维度参数函数 按照指定维度拿出tensor

# In[29]:
# 接受维度参数函数 按照指定维度拿出tensor
gray_named = (img_named * weights_aligned).sum('channels')
gray_named.shape, gray_named.names

在这里插入图片描述

八、使用不同名称组合维度

# In[30]:
# 使用不同名称组合维度
try:
    gray_named = (img_named[..., :3] * weights_named).sum('channels')
except Exception as e:
    print(e)



# In[31]:
# 删除名称
gray_plain = gray_named.rename(None)
gray_plain.shape, gray_plain.names

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

【网络星空】

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

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

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

打赏作者

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

抵扣说明:

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

余额充值