Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在tensorflow js中编写自定义InstantLayer规范化_Javascript_Tensorflow_Machine Learning_Tensorflow.js - Fatal编程技术网

Javascript 在tensorflow js中编写自定义InstantLayer规范化

Javascript 在tensorflow js中编写自定义InstantLayer规范化,javascript,tensorflow,machine-learning,tensorflow.js,Javascript,Tensorflow,Machine Learning,Tensorflow.js,我试图在浏览器中实现一个深度学习模型,这需要移植一些自定义层,其中之一就是即时层规范化。下面是一段应该可以工作但有点旧的代码。 我得到这个错误: 未捕获(承诺中)引用错误:未定义初始值设定项 在InstantLayerNormalization.build 类InstantLayerNormalization扩展了tf.layers.Layer { 静态类名称='InstantLayerNormalization'; ε=1e-7 伽马射线; 贝塔; 构造函数(配置) { 超级(配置); }

我试图在浏览器中实现一个深度学习模型,这需要移植一些自定义层,其中之一就是即时层规范化。下面是一段应该可以工作但有点旧的代码。 我得到这个错误:

未捕获(承诺中)引用错误:未定义初始值设定项 在InstantLayerNormalization.build


类InstantLayerNormalization扩展了tf.layers.Layer
{
静态类名称='InstantLayerNormalization';
ε=1e-7
伽马射线;
贝塔;
构造函数(配置)
{
超级(配置);
}
getConfig()
{
const config=super.getConfig();
返回配置;
}
构建(输入形状)
{
let shape=tf.张量(输入_shape);
//初始化伽马射线
self.gamma=self.add_权重(形状=形状,
初始值设定项='ones',
可训练的,
name='gamma')
//初始化测试版
self.beta=self.add_重量(形状=形状,
初始值设定项='零',
可训练的,
name='beta')
}        
呼叫(输入){
平均值=tf.math.reduce_平均值(输入,轴=[-1],keepdims=True)
方差=tf.math.reduce_-mean(tf.math.square(输入-平均值),轴=[-1],keepdims=True)
std=tf.math.sqrt(方差+自身ε)
输出=(输入-平均值)/std
输出=输出*self.gamma
输出=输出+自测试
返回输出
}
静态获取类名(){
log(类名);
返回类名;
}
}
registerClass(InstantLayerNormalization);

继承类
tf.layers.Layer
的方法调用不正确

  • python中的
    self
    在js中是
    this
  • add_weight
    相当于
    addWeight
  • addWeight
    方法的签名。请注意,js中没有函数参数解构赋值的格式
    variable=value
//而不是这个
self.gamma=self.add_weight(shape=shape,初始值设定项='one',trainable=true,name='gamma')
//应该是这样
this.gamma=this.addWeight('gamma',shape,未定义,'one',未定义,true)
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs/dist/tf.min.js"> </script>
<script>
class InstantLayerNormalization extends tf.layers.Layer
{
    static className = 'InstantLayerNormalization';
    epsilon = 1e-7 
    gamma;
    beta;
    constructor(config) 
    {
        super(config);
    }
    getConfig() 
    {
        const config = super.getConfig();
        return config;
    }
    
    build(input_shape)
    {
        let shape = tf.tensor(input_shape);
        // initialize gamma
        self.gamma = self.add_weight(shape=shape, 
                                     initializer='ones', 
                                     trainable=true, 
                                     name='gamma')
        // initialize beta
        self.beta = self.add_weight(shape=shape,
                            initializer='zeros',
                            trainable=true,
                            name='beta')
    }        

    call(inputs){
        mean = tf.math.reduce_mean(inputs, axis=[-1], keepdims=True)
        variance = tf.math.reduce_mean(tf.math.square(inputs - mean), axis=[-1], keepdims=True)
        std = tf.math.sqrt(variance + self.epsilon)
        outputs = (inputs - mean) / std
        outputs = outputs * self.gamma
        outputs = outputs + self.beta
        return outputs
    }
    static get className() {
        console.log(className);
       return className;
    }
}

tf.serialization.registerClass(InstantLayerNormalization);
</script>