如何修改让两个矩阵一致?输入矩阵是怎么得出的?

现在出现这个问题

img


我向上看代码应该是这里的设置问题

img


两个矩阵相乘行数要等于列数),但是我对nn.linear这整个函数的运行不是很清楚[衰],每个都调了一下还是不一致,上网搜到的看的也不是特别懂,想问问这个要怎么改呀

这个报错并不是nn.linear的报错啊,而是你下面的F.Linear()的报错,这里的矩阵相乘错误,也就是你的X的维度和params["linear1.weights"]这两个矩阵相乘错误,一个是12x3735,一个是10x100,这不是肯定错误了啊,我没有你的代码我也不确定是12还是10错了,但是按理来说这两个里面有一个是batch size的参数,你的x和input的batch 为什么会不一样呢

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇博客: 07.nn网络层-卷积层-池化-线性-激活函数层中的 nn.Linear 部分也许能够解决你的问题。
  • 以下回答由chatgpt基于相关博客总结生成:

    首先,我们需要明确两个矩阵相乘的条件,即第一个矩阵的列数必须和第二个矩阵的行数相等。在给定的代码中,input1矩阵的列数为4,input2矩阵的行数为4,满足相乘条件。所以我们可以认为相乘的问题不在这里。

    接下来,看一下代码中的linear层。nn.Linear是一个线性层,可以进行矩阵相乘运算。这里我们使用的是一个4维输入向量映射到一个2维输出向量。

    问题很可能在代码的输入和参数设置上。我们可以通过打印一些信息来查看输入和参数的形状。

    import torch
    import torch.nn as nn
    
    # 输入数据
    input1 = torch.randn(3, 4)
    input2 = torch.randn(4, 2)
    
    # 定义线性层
    linear = nn.Linear(4, 2)
    
    print("input1 shape:", input1.shape)
    print("input2 shape:", input2.shape)
    
    print("linear weight shape:", linear.weight.shape)
    print("linear bias shape:", linear.bias.shape)
    
    # 矩阵相乘
    output = linear(input1)
    
    print(output.shape)
    print(output)
    

    可以看到,这里linear层的权重参数和偏置参数的形状是(2, 4)和(2,)。这意味着参数的维度和矩阵相乘的维度是不一致的。

    解决方案是,我们需要将linear层的权重参数的形状改为(4, 2),以便与输入矩阵相乘。同时,我们还需要将输入矩阵的形状改为(4, 3)以适应新的权重参数形状。

    修改后的代码如下:

    import torch
    import torch.nn as nn
    
    # 输入数据
    input1 = torch.randn(4, 3)
    input2 = torch.randn(4, 2)
    
    # 定义线性层
    linear = nn.Linear(4, 2)
    linear.weight.data = torch.randn(2, 4)  # 修改权重参数的形状
    
    print("input1 shape:", input1.shape)
    print("input2 shape:", input2.shape)
    
    print("linear weight shape:", linear.weight.shape)
    print("linear bias shape:", linear.bias.shape)
    
    # 矩阵相乘
    output = linear(input1)
    
    print(output.shape)
    print(output)
    

    这样修改后,两个矩阵相乘的结果应该是一致的了。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^