【问题标题】:How do I apply a map function to a tensor ? (Tensorflow.js)如何将映射函数应用于张量? (张量流.js)
【发布时间】:2018-05-10 07:36:17
【问题描述】:

如何将函数应用于张量的每个元素,例如

var new_tensor = old_tensor.map(map_function)

【问题讨论】:

  • @nathan 的答案在所有情况下都有效,但速度很慢,因为需要从 webgl 环境传输数据。如果您只想从旧值中计算出新值,请考虑使用 tf 数学方法。如果您能提供您想申请的map_function,这将有所帮助。
  • @SebastianSpeitel 我需要映射函数来改变神经网络的权重。所以基本上,地图功能是随机化一些权重
  • 如果有帮助,有一个tf.layers.dropout,正是因为这个原因而存在:js.tensorflow.org/api/0.10.0/#layers.dropout
  • @Aditya 为你做了这些工作吗?

标签: tensorflow tensor tensorflow.js


【解决方案1】:

如果您使用oldTensordataSync 方法,您可以获得一个TypedArray,您可以对其进行映射。

var old_tensor_vals = old_tensor.dataSync()
var new_tensor_vals = old_tensor_vals.map(map_function)

【讨论】:

    【解决方案2】:

    如果您的map_function 足够具体,您可以简单地使用张量数学来完成。

    下面的函数是实现:

    old => Math.random()>chance?Math.random():old;
    

    const old = tf.randomUniform([10], 0, 10);
    const chance = 0.75;
    
    const mapped = tf.tidy(() => {
      const max = Math.round(100 * chance);
      const min = max - 1;
      const random = tf.randomUniform([old.shape[0]], 0, 100).floor();
      const ones = random.clipByValue(min, max).sub(tf.scalar(min));
      ones.print();
    
      const zeros = ones.sub(tf.scalar(1)).neg();
      zeros.print();
    
      const newValues = tf.randomUniform([old.shape[0]]); //or whatever you want
      //newValues.print();
    
      return old.mul(ones).add(newValues.mul(zeros));
    });
    
    old.print();
    mapped.print();
    <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@0.10.0">
    </script>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-17
      • 1970-01-01
      • 1970-01-01
      • 2019-10-19
      • 1970-01-01
      • 2017-12-01
      • 1970-01-01
      • 2021-05-05
      相关资源
      最近更新 更多