node.js - How to apply tf.layers.add on different models' weights?
问题描述
I am trying to make an element-wise addition on the weights of two different models.
I developed the following algorithm :
async function getWeights(url){
return new Promise(async function(resolve, reject){
const model = await tf.loadLayersModel(url);
resolve(model.layers[0].getWeights);
});
}
async function aggregate(){
return new Promise(function (resolve, reject){
weights.push(getWeights('file://./mymodel/modelReceived.json'));
weights.push(getWeights('file://./mymodel/model.json'));
let averageLayer = tf.layers.average();
console.log(weights.length);
const average = averageLayer.apply([weights[0], weights[1]]);
model.layers[0].setWeights[average];
resolve(model);
});
}
async function returnValue(){
var model = await aggregate();
console.log(model);
}
returnValue();
However, I am getting this error:
(node:20468) UnhandledPromiseRejectionWarning: Error: A merge layer should be called on an Array of at least 2 inputs. Got 1 input(s).
I created the models with the following code:
const modelOne = tf.sequential();
modelOne.add(tf.layers.dense({units: 100, activation: 'relu', inputShape: [50]}));
modelOne.compile({optimizer: 'sgd', loss: 'meanSquaredError', metrics: ['accuracy']});
Can anyone explain the error to me? Are there any alternative ways to make the addition?
解决方案
该函数getWeights()
返回一个 Promise,因此当您调用时,weights.push(getWeights('...'))
您传入的是 Promise 而不是张量。它可以像这样更新:
weights.push(await getWeights('...'))
中的 PromisegetWeights()
解析为函数(即model.layers[0].getWeights
),而不是解析为权重:
resolve(model.layers[0].getWeights())
你不需要同时做 Promise 和 async/await。您可以像这样简化getWeights()
功能:
async function getWeights(url){
const model = await tf.loadLayersModel(url);
return model.layers[0].getWeights();
}
aggregate()
也可以使用类似的更新。
您可以在此处找到有关 Promises 和 async/await 的更多详细信息: https ://stackoverflow.com/a/14220323
推荐阅读
- sql - SQL to JSON - 如何在没有列名的情况下获取查询输出,然后将两列放在一起
- mysql - 通过 Shell 脚本输入 MySQL 密码
- java - 从 Visual Studio 迁移到 Java IDE
- java - Java转储中保留的大小= 0是什么意思?
- excel - 变量类型的自定义类的父对象
- android - 无法在 Android 上的 React Native 中设置当前 Facebook AccessToken
- c# - response.data/response.d 显示“未定义”
- code-generation - 是否可以从 Magic Draw 中的状态机生成完整的 C/C++/Java 代码?
- angular - Observable 按顺序发出并从前一个获取输入
- powershell - Powershell 应该在一年中的所有时期运行命令