tf.matmul()和tf.multipy()的区别

首先我们分析一下下面的代码:

import tensorflow as tf
import numpy as np

a=tf.constant([[1., 2., 3.],[4., 5., 6.]])
b=np.float32(np.random.randn(3,2))
#c=tf.matmul(a,b)
c=tf.multiply(a,b)
init=tf.global_variables_initializer()
with tf.Session() as sess:
    print(c.eval())

问题是上面的代码编译正确吗?编译一下就知道,错误信息如下:

ValueError: Dimensions must be equal, but are 2 and 3 for ‘Mul‘ (op: ‘Mul‘) with input shapes: [2,3], [3,2].

显然,tf.multiply()表示点积,因此维度要一样。而tf.matmul()表示普通的矩阵乘法。

而且tf.multiply(a,b)和tf.matmul(a,b)都要求a和b的类型必须一致。但是之间存在着细微的区别。

在tf中所有返回的tensor,不管传进去是什么类型,传出来的都是numpy ndarray对象。

看看官网API介绍:

tf.matmul(
    a,
    b,
    transpose_a=False,
    transpose_b=False,
    adjoint_a=False,
    adjoint_b=False,
    a_is_sparse=False,
    b_is_sparse=False,
    name=None
)
tf.multiply(
    x,
    y,
    name=None
)

但是tf.matmul(a,b)函数不仅要求a和b的类型必须完全一致,同时返回的tensor类型同a和b一致;而tf.multiply(a,b)函数仅要求a和b的类型显式一致,同时返回的tensor类型与a一致,即在不声明类型的情况下,编译不报错。

例如:

#类型一致,可以运行
import tensorflow as tf
import numpy as np

a=tf.constant([[1, 2, 3],[4, 5, 6]],dtype=np.float32)
b=np.float32(np.random.randn(3,2))
c=tf.matmul(a,b)
#c=tf.multiply(a,b)
init=tf.global_variables_initializer()
with tf.Session() as sess:
    print (type(c.eval()),type(a.eval()),type(b))
#类型不一致,不可以运行
import tensorflow as tf
import numpy as np

a=tf.constant([[1, 2, 3],[4, 5, 6]])
b=np.float32(np.random.randn(3,2))
c=tf.matmul(a,b)
#c=tf.multiply(a,b)
init=tf.global_variables_initializer()
with tf.Session() as sess:
    print (type(c.eval()),type(a.eval()),type(b))
#类型不一致,可以运行,结果的类型和a一致
import tensorflow as tf
import numpy as np

a=tf.constant([[1, 2, 3],[4, 5, 6]])
b=np.float32(np.random.randn(2,3))
#c=tf.matmul(a,b)
c=tf.multiply(a,b)
init=tf.global_variables_initializer()
with tf.Session() as sess:
    print (c.eval())
    print (type(c.eval()),type(a.eval()),type(b))
#类型不一致,不可以运行
import tensorflow as tf
import numpy as np

a=tf.constant([[1, 2, 3],[4, 5, 6]], dtype=np.float32)
b=tf.constant([[1, 2, 3],[4, 5, 6]], dtype=np.int32)
#c=tf.matmul(a,b)
c=tf.multiply(a,b)
init=tf.global_variables_initializer()
with tf.Session() as sess:
    print (c.eval())
    print (type(c.eval()),type(a.eval()),type(b))

原文地址:https://www.cnblogs.com/cvtoEyes/p/9035706.html

时间: 2024-11-06 11:25:28

tf.matmul()和tf.multipy()的区别的相关文章

tf.matmul函数

tf.matmul(a,b,transpose_a=False,transpose_b=False, adjoint_a=False, adjoint_b=False, a_is_sparse=False, b_is_sparse=False, name=None) 参数: a 一个类型为 float16, float32, float64, int32, complex64, complex128 且张量秩 > 1 的张量 b  一个类型跟张量a相同的张量 transpose_a 如果为真,

tf.Variable、tf.get_variable、tf.variable_scope以及tf.name_scope关系

1. tf.Variable与tf.get_variable tensorflow提供了通过变量名称来创建或者获取一个变量的机制.通过这个机制,在不同的函数中可以直接通过变量的名字来使用变量,而不需要将变量通过参数的形式到处传递. TensorFlow中通过变量名获取变量的机制主要是通过tf.get_variable和tf.variable_scope实现的. 当然,变量也可以通过tf.Varivale来创建.当tf.get_variable用于变量创建时,和tf.Variable的功能基本等价

tf.Session()、tf.InteractiveSession()

官方tutorial是这么说的: The only difference with a regular Session is that an InteractiveSession installs itself as the default session on construction. The methods Tensor.eval() and Operation.run() will use that session to run ops. 翻译一下就是:tf.InteractiveSes

TFboy养成记 tf.cast,tf.argmax,tf.reduce_sum

referrence: 莫烦视频 先介绍几个函数 1.tf.cast() 英文解释: 也就是说cast的直译,类似于映射,映射到一个你制定的类型. 2.tf.argmax 原型: 含义:返回最大值所在的坐标.(谁给翻译下最后一句???) ps:谁给解释下axis最后一句话? 例子: 3.tf.reduce_mean() 原型: 含义:一句话来说就是对制定的reduction_index进行均值计算. 注意,reduction_indices为0时,是算的不同的[]的同一个位置上的均值 为1是是算

Migration from TF Service to TF Server with the TFS Integration Platform

Are you worried that you will not be able to migrate from http://tfs.visualstudio.com when they start charging for it and you don't want to pay? Fear not as we have the technology to migration from TF Service to TF Server with the TFS Integration Pla

tensorflow中使用tf.variable_scope和tf.get_variable的ValueError

ValueError: Variable conv1/weights1 already exists, disallowed. Did you mean to set reuse=True in VarScope? Originally defined at: 在使用tensorflow 中的tf.variable_scope和tf.get_variable搭建网络时,重复运行程序会报以上的ValueError错误,这是因为第二次运行时,内存中已经存在名字相同的层或者参数,发生了冲突,所以会提示

TF:利用TF的train.Saver将训练好的variables(W、b)保存到指定的index、meda文件

import tensorflow as tf import numpy as np W = tf.Variable([[2,1,8],[1,2,5]], dtype=tf.float32, name='weights') b = tf.Variable([[1,2,5]], dtype=tf.float32, name='biases') init= tf.global_variables_initializer() saver = tf.train.Saver() with tf.Sessi

TensorFlow 辨异 —— tf.placeholder 与 tf.Variable

二者的主要区别在于: tf.Variable:主要在于一些可训练变量(trainable variables),比如模型的权重(weights,W)或者偏执值(bias): 声明时,必须提供初始值: 名称的真实含义,在于变量,也即在真实训练时,其值是会改变的,自然事先需要指定初始值:  weights = tf.Variable( tf.truncated_normal([IMAGE_PIXELS, hidden1_units], stddev=1./math.sqrt(float(IMAGE_

tf.assign,tf.assign_add,tf.assign_sub

a = tf.Variable(0.0,dtype=tf.float32) with tf.Session() as sess: sess.run(tf.global_variables_initializer()) print(sess.run(a)) a = tf.assign(a,10) print(sess.run(a)) a = tf.assign(a,20) print(sess.run(a)) 0.0 10.0 20.0 a = tf.Variable(1,dtype=tf.flo