我已经将训练有素的keras模型转换为tensorflow.js,现在我试图在react-native中实现它。该模型可以很好地转换,但是当我尝试加载它时,它说
错误:未知激活:消失
我知道可以制作自定义图层,但是我不确定这是否适用于已经训练过的模型。
有什么可解决的地方吗?
代码: Swift.js
import * as tf from '@tensorflow/tfjs';
class Swish extends tf.layers.Layer {
constructor(config) {
super(config);
this.alpha = config.alpha;
}
call(input) {
return tf.tidy(() => {
const x = input[0]; //tf.getExactlyOneTensor(input);
return tf.sigmoid(x.mul(this.alpha)).mul(x);
});
}
computeOutputShape(inputShape){
return inputShape;
}
static get className() {
return 'swish';
}
}
export default Swish;
正在加载:
import Swish from '/Users/alex/Documents/GitHub/TrueSkyApp/src/components/swish.js'
const modelJson = require('/Users/alex/Documents/GitHub/TrueSkyApp/assets/model/model.json');
const modelWeights = require('/Users/alex/Documents/GitHub/TrueSkyApp/assets/model/group1-shard1of1.bin');
class TFtest extends Component {
private model: any
state = {
isModelReady: false
}
async componentDidMount() {
await tf.ready()
this.model = await tf.loadLayersModel(bundleResourceIO(modelJson, modelWeights));
this.setState({
isModelReady: true
})
//Output in Expo console
console.log(this.state.isModelReady)
}
render() {
return (
<View style={styles.container}>
<Text>Model ready? {this.state.isModelReady ? <Text>Yes</Text> : ''}</Text>
</View>
)
}
}
答案 0 :(得分:0)
即使模型已经过训练,js中加载的模型也需要查看层的实现,以查看给定输入的层的输出可能是什么。
Error: Unknown activation: swish
很明显,该错误表明需要提供层激活
更新
该课程需要注册
tf.serialization.registerClass(Swish)
答案 1 :(得分:0)
我通过执行以下操作使它起作用:
在同一文件中创建swift类,而不是将其导入,然后添加
tf.serialization.registerClass(Swish)
下课后。