Python ackend函数。(不要使用循环)在不知道函数的情况下回答是不可能的。您使用的是哪个tensorflow版本?@DanielMöller我没有使用循环。我正在将(a,B)对的列表映射到函数。我将用真实的代码更新这个问题,但它与我所描述的没有太大区别。@Sh
Python ackend函数。(不要使用循环)在不知道函数的情况下回答是不可能的。您使用的是哪个tensorflow版本?@DanielMöller我没有使用循环。我正在将(a,B)对的列表映射到函数。我将用真实的代码更新这个问题,但它与我所描述的没有太大区别。@Sh,python,tensorflow,keras,Python,Tensorflow,Keras,ackend函数。(不要使用循环)在不知道函数的情况下回答是不可能的。您使用的是哪个tensorflow版本?@DanielMöller我没有使用循环。我正在将(a,B)对的列表映射到函数。我将用真实的代码更新这个问题,但它与我所描述的没有太大区别。@ShubhamShaswat TF1.13.1。不幸的是,我无法控制PC上的版本。您认为这在TF2.1计算机上会更好吗?我不确定,但您的自定义层和函数似乎连接不好,无法有效执行,在tesnorflow 2.0中有@tf.function将外部功能连
ackend函数。(不要使用循环)在不知道函数的情况下回答是不可能的。您使用的是哪个tensorflow版本?@DanielMöller我没有使用循环。我正在将(
a
,B
)对的列表映射到函数。我将用真实的代码更新这个问题,但它与我所描述的没有太大区别。@ShubhamShaswat TF1.13.1。不幸的是,我无法控制PC上的版本。您认为这在TF2.1计算机上会更好吗?我不确定,但您的自定义层和函数似乎连接不好,无法有效执行,在tesnorflow 2.0中有@tf.function
将外部功能连接到图形,我明天回到工作电脑时将尝试一下。回复:平行线。我意识到发生这种事情的风险。然而,由于这些点的性质,在我目前的情况下,这不是一个风险。不过,当我完成代码时,我正计划进行健全性检查。好的,对于mat.shape==(2,)
,你应该K。重塑(mat,(1,2,1,1,1))
我已经实现了你的建议,它似乎有效。不幸的是,我无法正确地测试它,因为我得到了以下错误:ValueError:检查目标时出错:预期dect\u decompo\u layer\u 1有5个维度,但得到了形状为(6、32、128、128)的数组。
。我已经检查了f3
的形状,它是(?,1,32,128,128)
。在那里的某个地方,Keras/TF似乎失去了通道维度。添加一个重塑
层只会将错误移到该层。您的模型输出与y
数据不匹配,只需重塑其中一个。是\uuuu len\uuuu
仍然将形状报告为(?,1,32,128,128)
,而它本应是(?,32,128,128)
。这仍然有点奇怪,因为我已经重塑了f3
张量以包含通道轴,但可能Keras喜欢删除大小为1的轴。无论哪种方式,这似乎比我之前的工作要快得多。
Input -(A, B)-> Model -(A', B')-> Function(A'[p], B'[p]) -(C[p])-> Result
def call(self, inputs, **kwargs): #shape (batch, 2, size, size, size)
sample3 = inputs + (self.mat2 - self.mat3)
#all shapes (batch, size, size, size)
x1 = inputs[:,0]
y1 = inputs[:,1]
x2 = sample3[:,0]
y2 = sample3[:,1]
#all shapes (1, size, size, size) or (batch, size, size, size)
x3 = self.mat1[:,0]
y3 = self.mat2[:,1]
x4 = self.mat2[:,0]
y4 = self.mat2[:,1]
#all shapes (batch, size, size, size)
px = (x1 * y2 - y1 * x2) * (x3 - x4) - (x1 - x2) * (x3 * y4 - y3 * x4)
px /= (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4)
py = (x1 * y2 - y1 * x2) * (y3 - y4) - (y1 - y2) * (x3 * y4 - y3 * x4)
py /= (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4)
#proceed with the rest
denominator = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4)
K.switch(
K.less(K.abs(denominator), K.epsilon()),
denominator + K.sign(denominator)*K.epsilon(),
denominator)
px /= denominator