我试图以python的方式处理一个可变大小的张量,如下所示:
# X is of shape [m, n]
for x in X:
process(x)
Run Code Online (Sandbox Code Playgroud)
我试图使用tf.scan,问题是我想处理每个子张量,所以我试图使用嵌套扫描,但是我启用了它,因为tf.scan可以使用累加器,如果没有发现它将把elems的第一个条目作为初始化器,我不想这样做.举个例子,假设我想在张量的每个元素中添加一个(这只是一个例子),我想逐个元素地处理它.如果我运行下面的代码,我将只添加一个子张量,因为扫描将第一个张量视为初始化器,以及每个子张量的第一个元素.
import numpy as np
import tensorflow as tf
batch_x = np.random.randint(0, 10, size=(5, 10))
x = tf.placeholder(tf.float32, shape=[None, 10])
def inner_loop(x_in):
return tf.scan(lambda _, x_: x_ + 1, x_in)
outer_loop = tf.scan(lambda _, input_: inner_loop(input_), x, back_prop=True)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
rs = sess.run(outer_loop, feed_dict={x: batch_x})
Run Code Online (Sandbox Code Playgroud)
有什么建议 ?
基本上,我希望我的自定义损失函数在通常的 MSE 和从不同索引中减去值的自定义 MSE 之间交替。
为了澄清,假设我有一个 [1, 2, 4, 5] 的 y_pred 张量和一个 [2, 5, 1, 3] 的 y_true 张量。在通常的 MSE 中,我们应该得到:
return K.mean(K.squared(y_pred - y_true))
Run Code Online (Sandbox Code Playgroud)
这将执行以下操作:
[1, 2, 4, 5] - [2, 5, 1, 3] = [-1, -3, 3, 2]
[-1, -3, 3, 2]² = [1, 9, 9, 4]
平均值([1, 9, 9, 4]) = 5.75
我需要我的自定义损失函数来选择这个平均值和其他从 y_pred 张量切换索引 1 和 3 之间的最小值,即:
[1, 5, 4, 2] - [2, 5, 1, 3] = [-1, 0, 3, 1]
[-1, 0, 3, …
我正在尝试在 Keras 中编写自定义损失函数,如下所示:Keras 中的自定义损失函数
我的自定义函数应该降低小于 25 的值的影响。为此,该函数将首先调用tf.clip_by_value(因此,任何小于 25 的值都将变为 25)yTrue和yPred(如上面的链接所示)。接下来,为了减少这些值的影响,当一个值 inyTrue等于 25 时,将对应的值yPred改为
yPred[i] - (yPred[i] - yTrue[i])/2。最后,该函数将在这两个张量上返回“binary_crossentropy”的结果。
我有两个主要问题:
在此先感谢您的帮助