如何在张量会话中一行运行多个操作?

时间:2017-04-28 18:01:17

标签: python python-2.7 python-3.x tensorflow tensorboard

我正在学习张量流,我先问两个问题,是否需要在会话中运行每个操作?就像我创建一个简单的程序,其中有三个操作加法和减法和矩阵乘法然后是否有必要在会话中运行所有这些操作?

import tensorflow as tf
import numpy as np
import os
os.environ["TF_CPP_MIN_LOG_LEVEL"]="3"
a=np.array([[1,2,3],[4,5,6],[5,6,7]],dtype="float32")
b=np.array([[7,8,9],[9,6,5],[6,7,8]],dtype="float32")
ab=tf.Variable(a)
bb=tf.constant(b)
inn=tf.global_variables_initializer()
add=ab+bb
sub=(ab-bb)

mul=tf.matmul(a,b)
with tf.Session() as rr:
    rr.run(inn)
    rr.run(ab)
    res=rr.run(mul)
    print(res)

所以现在我必须在session ??

中运行每个操作(add,sub和matmul)

如果“是”我必须运行然后我可以一起运行所有这些操作吗?我试过,但我得到了错误:

首先我尝试了这个:

import tensorflow as tf
import numpy as np
import os
os.environ["TF_CPP_MIN_LOG_LEVEL"]="3"
a=np.array([[1,2,3],[4,5,6],[5,6,7]],dtype="float32")
b=np.array([[7,8,9],[9,6,5],[6,7,8]],dtype="float32")
ab=tf.Variable(a)
bb=tf.constant(b)
inn=tf.global_variables_initializer()
add=ab+bb
sub=(ab-bb)

mul=tf.matmul(a,b)
with tf.Session() as rr:
    rr.run(inn,ab,add,sub,mul)
    rr.run(ab)
    res=rr.run(mul)
    print(res)

我收到了这个错误:

TypeError: run() takes from 2 to 5 positional arguments but 6 were given

所以我从运行中删除了一个参数(mul),然后我收到了这个错误:

 raise TypeError("Using a `tf.Tensor` as a Python `bool` is not allowed. "
    TypeError: Using a `tf.Tensor` as a Python `bool` is not allowed. Use `if t is not None:` instead of `if t:` to test if a tensor is defined, and use TensorFlow ops such as tf.cond to execute subgraphs conditioned on the value of a tensor.

我可以如何运行所有操作一次,或者我必须单独运行每个操作?

在写这段代码的过程中,我尝试将两个矩阵与形状相乘[2,3]我的程序是:

import tensorflow as tf
import numpy as np
import os
os.environ["TF_CPP_MIN_LOG_LEVEL"]="3"
a=np.array([[1,2,3],[4,5,6]],dtype="float32")
b=np.array([[7,8,9],[9,6,5]],dtype="float32")
ab=tf.Variable(a)
bb=tf.constant(b)
inn=tf.global_variables_initializer()
add=ab+bb
sub=(ab-bb)

mul=tf.matmul(a,b)
with tf.Session() as rr:
    rr.run(inn)
    rr.run(ab)
    res=rr.run(mul)
    print(res)

我收到了这个错误:

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

如何乘以a =([1,2,3],[4,5,6])b =([9,8,7],[6,4,3])??

1 个答案:

答案 0 :(得分:2)

要回答第一个问题,是的,一切都在会话中运行。您定义了一个图形,然后会话就是图形被编译,加载到tensorflow内部并执行所有变量的状态,只要会话打开就会保留。

你的代码有点奇怪。您将其中一个输入定义为常量,但将另一个输入定义为变量,但变量1不会更改。但是在最基本的层面上,您可以通过将多个操作作为列表传递来在会话中运行多个操作。方法如下:

a=np.array([[1,2,3],[4,5,6]],dtype="float32")
b=np.array([[7,8,9],[9,6,5]],dtype="float32")
tfa = tf.constant(a)
tfb = tf.constant(b)
add = tfa + tfb
sub = tfa - tfb
with tf.Session() as s:
    res_add, res_sub = s.run([add, sub])
print(res_add)
print(res_sub)

,输出

[[  8.  10.  12.]
 [ 13.  11.  11.]]
[[-6. -6. -6.]
 [-5. -1.  1.]]

你的矩阵乘法不起作用,因为内部维度必须匹配。这是回答你的问题,还是你想做别的事?