等变和不变 、向量神经元(vector neurons)是什么?

等变和不变 

等变:如果输入是一个旋转后的椅子,那么输出也应该是一个旋转后的椅子

不变:如果输入是一个旋转后的椅子,那么输出应该是一个椅子,而不是一只狗。

向量神经元(vector neurons)

向量神经元(Vector Neurons)是一种在神经网络模型中处理向量数据的神经元设计,特别适用于处理具有空间结构的数据,如3D几何形状或方向信息。这种设计与传统的标量神经元不同,后者通常处理单一数值数据(即标量)。向量神经元能够直接处理和保留数据的向量性质,如方向和大小,这使得它们在处理空间数据时更为有效和自然

向量神经元的pytorch实现方式是什么样的?给出它与普通神经元的代码实现上的区别?

普通神经元的PyTorch实现

普通神经元通常在全连接层(nn.Linear)中实现,接受输入向量(或批量输入矩阵),并输出另一个向量(或矩阵)。

import torch
import torch.nn as nn

# 定义一个简单的全连接层
class SimpleLinearLayer(nn.Module):
    def __init__(self, input_dim, output_dim):
        super(SimpleLinearLayer, self).__init__()
        self.linear = nn.Linear(input_dim, output_dim)

    def forward(self, x):
        return self.linear(x)

# 示例使用
input_dim = 5
output_dim = 3
model = SimpleLinearLayer(input_dim, output_dim)
x = torch.rand(10, input_dim)  # 一个批量大小为10的输入
output = model(x)

 

向量神经元的PyTorch实现

向量神经元的实现需要考虑如何在层级操作中保持向量的空间属性。下面的代码示例展示了一个可能的向量神经元实现方法,其中包含了对输入向量进行旋转操作的示例,以体现如何处理向量数据。

class VectorNeuronLayer(nn.Module):
    def __init__(self, input_dim, output_dim):
        super(VectorNeuronLayer, self).__init__()
        # 假设输入和输出的每个维度都是3D向量
        self.weight = nn.Parameter(torch.randn(output_dim, input_dim, 3, 3))
        self.bias = nn.Parameter(torch.randn(output_dim, 3))

    def forward(self, x):
        # x的形状假设为(batch_size, input_dim, 3) 表示一批3D向量
        # 应用向量变换,这里简化为矩阵乘法和加偏置
        output = torch.einsum('bij,ajk->bak', x, self.weight) + self.bias
        return output

# 示例使用
input_dim = 5
output_dim = 3
model = VectorNeuronLayer(input_dim, output_dim)
x = torch.rand(10, input_dim, 3)  # 每个输入是一个3D向量
output = model(x)

主要区别

  • 数据结构:普通神经元的输入和输出通常是标量值的集合,而向量神经元处理的是向量
  • 操作:在向量神经元中,操作需要保持向量的空间属性,例如通过矩阵乘法来实现旋转或其他变换,而普通神经元的操作主要是线性变换加上非线性激活。
  • 参数:向量神经元层的权重参数是一个四维张量(在上述示例中),而不是普通神经元的二维权重矩阵。

相关推荐

  1. 以下哪个指针类型

    2024-02-05 00:14:01       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-05 00:14:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-05 00:14:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-05 00:14:01       82 阅读
  4. Python语言-面向对象

    2024-02-05 00:14:01       91 阅读

热门阅读

  1. 自创微型小说——雨

    2024-02-05 00:14:01       46 阅读
  2. 突破编程_C++_面试(基础知识(6))

    2024-02-05 00:14:01       50 阅读
  3. 动态内容推荐系统PHP代码

    2024-02-05 00:14:01       42 阅读
  4. 【linux学习】linux下添加环境变量的方法

    2024-02-05 00:14:01       55 阅读
  5. 技术栈面试综合整理

    2024-02-05 00:14:01       53 阅读
  6. Liunx基本指令

    2024-02-05 00:14:01       48 阅读
  7. 利用tshark从pcap中解析http流量

    2024-02-05 00:14:01       58 阅读
  8. Linux系统内核-TCP连接数和网络等待时间设置优化

    2024-02-05 00:14:01       60 阅读
  9. 【设计模式:interpreter pattern】

    2024-02-05 00:14:01       50 阅读
  10. 【python3】多线程详解

    2024-02-05 00:14:01       43 阅读