Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow tf 2.0中类内的tf.placeholder_Tensorflow_Tensorflow2.0 - Fatal编程技术网

Tensorflow tf 2.0中类内的tf.placeholder

Tensorflow tf 2.0中类内的tf.placeholder,tensorflow,tensorflow2.0,Tensorflow,Tensorflow2.0,我正在尝试将我在TF1.0中编写的代码更改为TF2.0,但在替换类函数中的TF.placeholder时遇到了困难。我的代码如下 class User: x = tf.placeholder(tf.float32,shape=[None,784]) y_true = tf.placeholder(tf.float32, [None, 10]) W1 = tf.Variable(tf.random.truncated_normal([7840,1], stddev=0.1

我正在尝试将我在TF1.0中编写的代码更改为TF2.0,但在替换类函数中的TF.placeholder时遇到了困难。我的代码如下

class User:
    x = tf.placeholder(tf.float32,shape=[None,784])
    y_true = tf.placeholder(tf.float32, [None, 10])

    W1 = tf.Variable(tf.random.truncated_normal([7840,1], stddev=0.1))
    lambda_W = tf.Variable(tf.zeros([7840,1]))    
    W = tf.reshape(W1,[784, 10])

    ylogits = W*x
    y = tf.nn.softmax(ylogits)
    def __init__(self):
        pass

有没有办法在类中替换tf.placeholder以使代码在tf2.0中运行?

首先,我认为您打算为类的每个实例创建这些对象,而不是像现在这样为整个类创建一个。我还认为
W
x
之间的产品应该是矩阵产品,而不是元素产品,它不适用于给定的形状:

类用户:
定义初始化(自):
self.x=tf.placeholder(tf.float32,shape=[None,784])
self.y_true=tf.placeholder(tf.float32,[None,10])
self.W1=tf.Variable(tf.random.trunched_normal([7840,1],stddev=0.1))
self.lambda_W=tf.变量(tf.零([7840,1]))
self.W=tf.重塑(W1,[784,10])
self.ylogits=self.x@self.W
self.y=tf.nn.softmax(yLogics)
要在TensorFlow 2.x中使用它,您需要删除占位符,每次只需对每个新输入执行操作,例如使用新函数
调用

类用户:
定义初始化(自):
self.W1=tf.Variable(tf.random.trunched_normal([7840,1],stddev=0.1))
self.lambda_W=tf.变量(tf.零([7840,1]))
self.W=tf.重塑(W1,[784,10])
def呼叫(自我,x):
ylogits=self.x@self.W
返回tf.nn.softmax(ylogits)
您可以将其用作:

user1=User()
x=…#获取一些数据
y=user1.call(x)
或者,如果你想更“地道”,你可以使用
\uu call\uu

类用户:
定义初始化(自):
self.W1=tf.Variable(tf.random.trunched_normal([7840,1],stddev=0.1))
self.lambda_W=tf.变量(tf.零([7840,1]))
self.W=tf.重塑(W1,[784,10])
定义调用(self,x):
ylogits=x@W
返回tf.nn.softmax(ylogits)
然后你会做:

user1=User()
x=…#获取一些数据
y=user1(x)

首先,我认为您打算为类的每个实例创建这些对象,而不是像现在这样为整个类创建一个。我还认为
W
x
之间的产品应该是矩阵产品,而不是元素产品,它不适用于给定的形状:

类用户:
定义初始化(自):
self.x=tf.placeholder(tf.float32,shape=[None,784])
self.y_true=tf.placeholder(tf.float32,[None,10])
self.W1=tf.Variable(tf.random.trunched_normal([7840,1],stddev=0.1))
self.lambda_W=tf.变量(tf.零([7840,1]))
self.W=tf.重塑(W1,[784,10])
self.ylogits=self.x@self.W
self.y=tf.nn.softmax(yLogics)
要在TensorFlow 2.x中使用它,您需要删除占位符,每次只需对每个新输入执行操作,例如使用新函数
调用

类用户:
定义初始化(自):
self.W1=tf.Variable(tf.random.trunched_normal([7840,1],stddev=0.1))
self.lambda_W=tf.变量(tf.零([7840,1]))
self.W=tf.重塑(W1,[784,10])
def呼叫(自我,x):
ylogits=self.x@self.W
返回tf.nn.softmax(ylogits)
您可以将其用作:

user1=User()
x=…#获取一些数据
y=user1.call(x)
或者,如果你想更“地道”,你可以使用
\uu call\uu

类用户:
定义初始化(自):
self.W1=tf.Variable(tf.random.trunched_normal([7840,1],stddev=0.1))
self.lambda_W=tf.变量(tf.零([7840,1]))
self.W=tf.重塑(W1,[784,10])
定义调用(self,x):
ylogits=x@W
返回tf.nn.softmax(ylogits)
然后你会做:

user1=User()
x=…#获取一些数据
y=user1(x)

根据您想要实现的目标,TF2中不需要占位符。要使代码在TF2运行时中运行,一个简单的修复方法是将调用替换为
tf.compat.v1.placeholder()
。如果您想要惯用的TF2代码,则不需要它们,因为您有急切的执行。简单的Python变量将是足够的。您的代码通常有点奇怪,所有这些变量都是
User
的类变量,而不是实例变量(也就是说,
User
的所有实例将共享相同的变量),这就是您想要做的吗?@jdehesa:不确定我是否理解您的评论,但是我试图做的是针对每个实例优化W1(这里的class
User
指的是分布式学习环境中的一个工作者)。@Chao我的意思是,如果你做
user1=User()
user2=User()
,那么
user1.W1
user2.W1
(通常,
User.W1
)将引用完全相同的对象(在本例中为相同的TensorFlow变量),因为
W1
是类
User
的一个属性,而不是类的每个实例。我不确定这是否是您想要的。@jdehesa:啊,我明白了,但我想做的是让
user1.W1
不同于
user2.W1
。您知道我该怎么做吗?谢谢。取决于您想要什么hieve,TF2中不需要占位符。要使代码在TF2运行时中运行,一个简单的修复方法是将调用替换为
tf.compat.v1.placeholder()
。如果您想要惯用的TF2代码,您不需要它们,因为您有急切的执行。简单的Python变量将非常有用,因为您的代码通常有点奇怪,所有这些变量都是
User
的类变量,而不是实例变量(也就是说,
User
的所有实例将共享相同的变量),这就是你打算做的吗?@jdehesa:我不知道我是否会退出