如何在 Tensorflow 中使用多个输入来应用 tf.map_fn

Hee*_*ony 3 python deep-learning tensorflow turning-point tensor

我尝试使用 Pycharm 中的 Tensorflow 使用 tf.map_fn 获得多个输入的转折点。
但是,当我尝试执行此操作时,
出现错误: TypeError: testzz() Missing 1 requiredpositional argument: 'data'

我怎么解决这个问题?或者如何获取 idxCut 的大小以使用 for 循环?

开发内容。

  • 查找数据中与阈值对应的索引(idxCut)。
  • 检查idxCut对应的数据是否为TPR。

我想使用 for 循环在数据中找到有关 idxCut 的 TPR(转折点比率)。
我使用for循环来获取idx,idx-1和idx + 1之间的TPR。
我想找到数据[idx]高于其他数据[idx-1,idx+1]。

    def testtt(data):
        ### Cut-off Threshold
        newData = data[5:num_input - 5]   # shape = [1, 100]
        idxCut = tf.where(newData > cutoff) + 5
        idxCut = tf.squeeze(idxCut)   
        # The size of idxCut is always variable. shape = [1, 10] or shape = [1, 27] or etc

        tq = tf.map_fn(testzz, (idxCut, data), dtype=tf.int32)
        print('tqqqq ', tq)
Run Code Online (Sandbox Code Playgroud)
    def testzz(idxCut, data):
        v1 = tf.where(data[idxCut] > data[idxCut - 1], 1, 0)
        v2 = tf.where(data[idxCut] > data[idxCut + 1], 1, 0)
        return tf.where(v1 + v2 > 1, 1, 0)
Run Code Online (Sandbox Code Playgroud)
    def testtt(data):
        ### Cut-off Threshold
        newData = data[5:num_input - 5]   # shape = [1, 100]
        idxCut = tf.where(newData > cutoff) + 5
        idxCut = tf.squeeze(idxCut)   
        # The size of idxCut is always variable. shape = [1, 10] or shape = [1, 27] or etc

        tq = tf.map_fn(testzz, (idxCut, data), dtype=tf.int32)
        print('tqqqq ', tq)
Run Code Online (Sandbox Code Playgroud)

jde*_*esa 5

当您向 提供多个张量时tf.map_fn,它们的元素不会作为独立参数传递给给定函数,而是作为元组传递。做这个:

def testzz(inputs):
    idxCut, data = inputs
    v1 = tf.where(data[idxCut] > data[idxCut - 1], 1, 0)
    v2 = tf.where(data[idxCut] > data[idxCut + 1], 1, 0)
    return tf.where(v1 + v2 > 1, 1, 0)
Run Code Online (Sandbox Code Playgroud)