深度学习-矩阵相乘

假设某公司有4个工厂,每个工厂都有3种产品,销量数据如下:

工厂P1P2P3
524
382
604
016

每种产品的成本利润如下:

产品成本利润
P124
P213
P332

则这个公司各个工厂的总成本和总利润为:

甲:成本=5x2+2x1+4x3=24 利润=5x4+2x3+4x2=34
乙:成本=3x2+8x1+2x3=20 利润=3x4+8x3+2x2=40
丙:成本=6x2+0x1+4x3=24 利润=6x4+0x3+4x2=32
丁:成本=0x2+1x1+6x3=19 利润=0x4+1x3+6x2=15

工厂产品销量、产品成本利润,分别可以用两个矩阵表示,矩阵相乘即为工厂的总成本和总利润

Numpy 中的矩阵相乘函数

import numpy as np

A = np.array([[5,2,4], [3,8,2], [6,0,4], [0,1,6]])
array([[5, 2, 4],
       [3, 8, 2],
       [6, 0, 4],
       [0, 1, 6]])
       
B = np.array([[2,4], [1,3], [3,2]])
array([[2, 4],
       [1, 3],
       [3, 2]])
       
C = np.matmul(A, B)
array([[24, 34],
       [20, 40],
       [24, 32],
       [19, 15]])

深度学习框架 TensorFlow 和 PyTorch 中的矩阵相乘函数如下

import tensorflow as tf

C = tf.matmul(A, B)

[[24 34]
 [20 40]
 [24 32]
 [19 15]]
import torch

A = torch.from_numpy(A)
B = torch.from_numpy(B)
C = torch.matmul(A, B)  # 或者 torch.mm(A, B)

tensor([[24, 34],
        [20, 40],
        [24, 32],
        [19, 15]])

矩阵A的形状是 [4, 3]
矩阵B的形状是 [3, 2]
矩阵C的形状是 [4, 2]
发现什么了吗?

在进行深度学习计算时,有时候需要注意下矩阵维度是否正确,否则就报错了

a = np.array([1,2,3])
array([1, 2, 3])

b = a.reshape(-1,1)
array([[1],
       [2],
       [3]])

# numpy
np.matmul(a, b)
array([14])

# tensorflow
sess.run(tf.matmul(a, b))
ValueError: Shape must be rank 2 but is rank 1 for 'MatMul_14' (op: 'MatMul') with input shapes: [3], [3,1].
# 报错: 张量应该是2阶,但是其中一个为1阶

# pytorch
torch.matmul(torch.from_numpy(a), torch.from_numpy(b))
tensor([14])  # 正常输出

torch.mm(torch.from_numpy(a), torch.from_numpy(b))
RuntimeError: matrices expected, got 1D, 2D tensors at /Users/administrator/nightlies/pytorch-1.0.0/wheel_build_dirs/wheel_3.5/pytorch/aten/src/TH/generic/THTensorMath.cpp:935
# 报错: a张量是1D(1维),b张量是2D(2维),无法进行计算

# 修正
a = a.reshape(-1, 3)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值