Python 以下代码是否可以在inTensorflow中实现?
下面的代码是我试图在TensorFlow中实现的Matlab代码。 我想知道是否可以在TensorFlow的嵌套for循环中实现if-elsePython 以下代码是否可以在inTensorflow中实现?,python,tensorflow,tensorflow2.0,tensorflow-datasets,Python,Tensorflow,Tensorflow2.0,Tensorflow Datasets,下面的代码是我试图在TensorFlow中实现的Matlab代码。 我想知道是否可以在TensorFlow的嵌套for循环中实现if-else A = [100;200;300;300;100;200;200;100;300;300]; B = unique(A); C = [4;5;6]; D = zeros(length(A),1); for i = 1:length(A) for j = 1:length(B) if A(i) == B(j)
A = [100;200;300;300;100;200;200;100;300;300];
B = unique(A);
C = [4;5;6];
D = zeros(length(A),1);
for i = 1:length(A)
for j = 1:length(B)
if A(i) == B(j)
D(i) = D(i)+A(i)*C(j);
else
D(i) = D(i)+0;
end
end
end
让我们假设
A_tf = tf.placeholder(tf.float32, shape=[None, self.a.shape[1]])
c = tf.Variable(tf.ones([len(np.unique(self.a))]))
基于您的TensorFlow代码,我创建了下面的函数,希望它能够返回#输出'd'
def d_tensor(self,a,c):
val,idx = tf.unique(a)
val = tf.sort(val)
sh = tf.shape(val)[0]
one_hot_a = tf.one_hot(idx,depth=sh ,dtype = tf.float32)
d= tf.reduce_sum(one_hot_a*val*c, axis=-1)
return d
我得到以下错误:ValueError:尝试将“深度”转换为张量,但失败。错误:无法将未知维度转换为张量:?。
我不知道如何理解这个首先,我试图理解您的代码,所以我只是用经典的python和
a=[100200300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300
b=已排序(集合(a))
c=[4,5,6]
d=[0]*len(a)
对于范围内的i(len(a)):
j=b.指数(a[i])
d[i]=d[i]+a[i]*c[j]
打印(“a”,a)
打印(“b”,b)
打印(“c”,c)
打印(“d”,d)
这给了我输出
a[100200300300100200200200100300]
b[100200300]
c[4,5,6]
d[400,1000,1800,1800,400,1000,1000,400,1800,1800]
然后我尝试在tensorflow中做同样的事情,我做到了
a=tf.convert_to_tensor([100200300300003001002002001300300])
b、 idx=tf.unique(a)
b=tf.sort(b)
c=tf。将_转换为_张量([4,5,6])
one_hot_a=tf.one_hot(idx,depth=b.shape[0],dtype=tf.int32)
减少总和(一个热轴=-1)
其输出相同:
也许你能给我们一些数据,让我们知道这是否真的是你所期望的?我想知道是否有可能在TensorFlow的嵌套for循环中实现if-else。很可能是的。您应该首先尝试,如果遇到特定的技术问题,请提出一个问题。请看,。亲爱的帮助中心,我已经试过了,但不确定发生了什么,因为我对Tensorflow非常陌生。这就是为什么我从简单的Matlab实现开始,以确保我所要求的!我不确定这是如何解决我在评论中所写的问题的,我认为这一点仍然有效。亲爱的Maug,谢谢你的回复。我想我可能以错误的方式发布了这个问题。在我的问题中,'a'是形状(10,1)的占位符,c是形状的变量张量(在'a',1'中没有任何值),其中每一行都用1.0的值初始化。这两项在施工阶段定义。现在,在执行阶段,数据被馈送到“a”。在这个阶段,我想得到一个输出张量'd',如您在上面的代码片段中所示。我已经更新了我的代码。请调查一下。谢谢大家!@MitraLanka尝试将
sh=val.shape[0]
更改为sh=tf.shape(val)[0]
。您可能需要将one\u hot\u a=tf.one\u hot(idx,depth=sh,dtype=tf.int32)
更改为one\u hot\u a=tf.one\u hot(idx,depth=sh,dtype=tf.float32)
我已经更新了代码并运行了它。现在,我收到了一个不同的错误。”形状必须为rank1,但对于输入形状[?,1]“唯一”为rank2这个错误对我来说没有意义,因为我正在将秩为1的“a”向量馈送给a_tf。你能告诉我哪里出了问题吗?