当前位置:  开发笔记 > 人工智能 > 正文

tensorflow batch_matmul如何工作?

如何解决《tensorflowbatch_matmul如何工作?》经验,为你挑选了2个好方法。

Tensorflow有一个名为batch_matmul的函数,它可以将更高维的张量相乘.但是我很难理解它是如何工作的,也许部分是因为我很难想象它.

在此输入图像描述

我想要做的是将矩阵乘以3D张量的每个切片,但我不太明白张量a的形状是什么.z是最里面的维度吗?以下哪项是正确的?

在此输入图像描述

我最希望第一个是正确的 - 它对我来说最直观,很容易在.eval()输出中看到.但我怀疑第二个是正确的.

Tensorflow说batch_matmul执行:

out[..., :, :] = matrix(x[..., :, :]) * matrix(y[..., :, :])

那是什么意思?在我的例子中,这意味着什么?什么与什么相乘?为什么我没有按照预期的方式获得3D张量?



1> Daniela..:

你可以把它想象成对批处理中的每个训练样例做一个matmul.

例如,如果您有两个具有以下尺寸的张量:

a.shape = [100, 2, 5]
b.shape = [100, 5, 2]

并且你做了一个批处理tf.matmul(a, b),你的输出将具有形状[100, 2, 2].

100是您的批量大小,其他两个维度是数据的维度.



2> Salvador Dal..:

首先tf.batch_matmul()被删除,不再可用.现在你想使用tf.matmul():

输入必须是矩阵(或秩> 2的张量,表示矩阵批量),具有匹配的内部维度,可能在换位之后.

所以我们假设你有以下代码:

import tensorflow as tf
batch_size, n, m, k = 10, 3, 5, 2
A = tf.Variable(tf.random_normal(shape=(batch_size, n, m)))
B = tf.Variable(tf.random_normal(shape=(batch_size, m, k)))
tf.matmul(A, B)

现在你将收到一个形状的张量(batch_size, n, k).这是这里发生的事情.假设你有batch_size矩阵nxmbatch_size矩阵mxk.现在,对于每对它们,你计算出nxm X mxk哪个给你一个nxk矩阵.你会拥有batch_size它们.

请注意,这样的事情也是有效的:

A = tf.Variable(tf.random_normal(shape=(a, b, n, m)))
B = tf.Variable(tf.random_normal(shape=(a, b, m, k)))
tf.matmul(A, B)

并会给你一个形状 (a, b, n, k)

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有