tensor索引[..., 0]

这篇博客探讨了在深度学习目标检测任务中,如何通过索引来解析预测输出。内容涉及tensor的索引方式,例如使用sigmoid激活函数限制框坐标(x, y)的范围,并解释了prediction的不同索引表示的含义,如prediction[...,0]代表边界框的x坐标,prediction[...,4]是置信度等关键信息。

tensor的一个索引方式:

self.bbox_attrs = 5 + num_classes # 5 =(4+1):框的四个参数(x,y,w,h)+ 框内是否有物体

prediction = input.view(batch_size, len(self.anchors_mask[i]),
                                    self.bbox_attrs, input_height, input_width).permute(0, 1, 3, 4, 2).contiguous()
x = torch.sigmoid(prediction[..., 0])  #sigmoid将调整的范围固定在一个cell(0,1)里
y = torch.sigmoid(prediction[..., 1])
w = prediction[..., 2]
h = prediction[..., 3]
conf = torch.sigmoid(prediction[..., 4])
pred_cls = torch.sigmoid(prediction[..., 5:])

prediction[…, 0] 表示prediction的01234维数的值全取,索引0代表bbox_attrs的第一个位置。相当于二维矩阵的每行的第一个元素。
prediction[:, :, 1]相当于取第三维的第二个元素。
prediction[:, 1]相当于取第二维的第二个元素。

### 如何正确打印 Tensor 输出 在 TensorFlow 和 PyTorch 中,`Tensor` 是核心数据结构之一。为了更好地调试程序或查看中间计算结果,了解如何正确打印 `Tensor` 的内容至关重要。 #### 打印 SparseTensor 内容 当处理稀疏张量(SparseTensor)时,直接使用 Python 的内置 `print()` 函数可能无法直观显示其全部内容。这是因为 SparseTensor 实际上由三个部分组成:`indices`, `values`, 和 `dense_shape`[^1]。可以通过访问这些属性来分别打印它们的内容: ```python import tensorflow as tf sparse_tensor = tf.sparse.SparseTensor(indices=[[0, 0], [1, 2]], values=[1, 2], dense_shape=[3, 4]) print(sparse_tensor.indices.numpy()) # 显示索引位置 print(sparse_tensor.values.numpy()) # 显示非零值 print(sparse_tensor.dense_shape.numpy()) # 显示稠密形状 ``` 上述代码展示了如何逐一分解并打印 SparseTensor 的组成部分。 --- #### 调整 PyTorchTensor 的打印精度 PyTorch 默认以单精度浮点数存储 Tensor 数据,这意味着它仅能提供大约 7 位有效数字[^5]。即使通过调整打印选项设置了更高的小数位数,超出的有效数字也没有实际意义。如果需要更高精度的结果,则可以考虑将 Tensor 转换为双精度浮点数后再进行操作: ```python import torch tensor = torch.tensor([1.123456789]) # 单精度,默认 dtype=torch.float32 torch.set_printoptions(precision=10) # 设置打印精度为 10 小数位 print(tensor) # 如果需要更精确的表示方式,可将其转换为 double 类型 double_tensor = tensor.double() print(double_tensor) ``` 需要注意的是,在大多数情况下,单精度已经足够满足需求;但如果涉及高精度科学计算场景,则应优先选用双精度类型。 --- #### 使用 Keras 构建模型中的输入层定义 对于基于 Keras 的深度学习框架而言,构建神经网络的第一步通常是定义输入层。这一步骤决定了后续各层接收的数据维度大小以及格式化规则。例如下面这段代码片段演示了两个不同尺寸图像作为输入的情况[^4]: ```python from keras.layers import Input a = Input(shape=(32, 32, 3)) # 定义第一个输入层,适用于较小分辨率图片 b = Input(shape=(64, 64, 3)) # 定义第二个输入层,适合较大分辨率图片 ``` 这里创建了两组独立但平行存在的输入接口供开发者灵活组合设计复杂架构。 --- #### 图像预处理——裁剪与填充保持原比例不变 有时为了让所有训练样本具有一致的空间尺度而不得不执行一些几何变换比如缩放、旋转或者平移等前处理步骤之前先做标准化很重要。其中一种方法就是利用 TensorFlow 提供的功能函数实现既定目标的同时维持原有宽高比关系不被破坏: ```python image = ... # 原始图像加载过程省略 resized_image = tf.image.resize_image_with_crop_or_pad(image, target_height=128, target_width=128) ``` 此命令会自动判断源图相对于指定的目标区域是否存在多余空白边缘还是不足覆盖范围,并据此采取相应措施完成最终效果呈现[^3]. --- ### 总结 无论是 TensorFlow 还是 PyTorch ,掌握好各自平台下特有的对象特性及其对应的操作技巧都是十分必要的 。以上介绍了一些常见情形下的解决方案希望对你有所帮助!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值