深度学习 tensorflow 三维矩阵乘法(batch 迭代必须搞懂的矩阵乘法,维度增加)

import tensorflow as tf

# 2 * 2 * 2 的embedding 矩阵 , 一个batch,每个样本有f个字段,每个字段有k维
# 那么矩阵的大小就是batch * f * k
embedding_index = tf.constant([[[0.1,0.2],
                                [0.3,0.2]],
                              
                               [[0.8,0.2],
                                [0.5,0.4]]
                              ])
#  2 * 2 的系数矩阵
X_sparse  = tf.constant([[1.0,2.0],
                         [3.0,4.0]])

# 为了和embedding_index 相乘,需要增加一维度, 增加一维有下面两种写法
# 增加维度的方法1:sparse_value = tf.reshape(X_sparse, shape=[-1, 2, 1])
# 下面是增加维度的方法2
sparse_value = tf.expand_dims(X_sparse,2)

embedding_matmul = tf.matmul(embedding_index, sparse_value)

embedding_multiply = tf.multiply(embedding_index, sparse_value)


print(embedding_index)

print(sparse_value)

with tf.Session() as sess:
    
    print(sess.run(X_sparse))
    
    print("-"*10)    
    print(sess.run(sparse_value))
    
    print("-"*10)
    print(sess.run(embedding_index))
    
    print("-"*10)
    print(sess.run(embedding_matmul))
    
    print("-"*10)
    print(sess.run(embedding_multiply))

 

 

 

Tensor("Const_4:0", shape=(2, 2, 2), dtype=float32)
Tensor("ExpandDims_2:0", shape=(2, 2, 1), dtype=float32)
[[1. 2.]
 [3. 4.]]
----------
[[[1.]
  [2.]]

 [[3.]
  [4.]]]
----------
[[[0.1 0.2]
  [0.3 0.2]]

 [[0.8 0.2]
  [0.5 0.4]]]
----------
[[[0.5       ]
  [0.70000005]]

 [[3.2       ]
  [3.1       ]]]
----------
[[[0.1 0.2]
  [0.6 0.4]]

 [[2.4 0.6]
  [2.  1.6]]]

 

### 如何确定深度学习模型中的维度 #### 张量形状的概念 在深度学习中,张量是基本的数据结构,其形状描述了各个维度上的大小。对于一个多维数组而言,形状定义了每一轴上元素的数量。例如,在图像处理领域,常见的四维张量可能具有 (batch_size, height, width, channels) 的形式[^2]。 #### 输入输出尺寸的理解 输入和输出尺寸是指进入或离开层的张量的具体几何属性。这不仅限于二维矩阵;实际上可以涉及任意数量的维度。当构建神经网络架构时,确保各层之间兼容至关重要——即前一层的输出应适配下一层期望接收的输入规格。比如卷积神经网路(CNN),如果输入图像是RGB彩色图片,则通道数通常是3;如果是灰度图片则为1。 #### 维度判定技巧 为了正确设定并验证模型内不同组件间的连接关系,开发者需熟悉如下几个方面: - **批次大小(batch size)**:指一次迭代过程中所使用的样本数目。它影响到内存占用以及收敛速度等因素。 - **空间分辨率(spatial resolution)**:像高度(height)宽度(width)这样的参数决定了特征映射的空间范围。随着层数加深,通过池化(pooling)等操作可能会缩小这一尺度。 - **深度(depth)/通道(channel count)**:代表颜色信息或其他类型的多频谱特性。CNN 中滤波器(filter)的应用会改变这个数值。 - **时间步(time steps)**:针对序列建模任务如RNN/LSTM/GRU来说尤为重要,指示着序列长度或者说历史记录窗口有多宽[^1]。 ```python import tensorflow as tf # 创建一个随机初始化的张量作为示例 tensor_example = tf.random.normal([8, 224, 224, 3]) print("Tensor shape:", tensor_example.shape) ``` 上述代码展示了创建了一个模拟批量大小为8、分辨率为\(224 \times 224\)像素且有三个色彩通道(红绿蓝)组成的图像数据集对应的张量实例,并打印出了它的具体形态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值