Tensorflow. js с использованием настраиваемых слоев с уже обученными моделями - PullRequest
1 голос
/ 27 мая 2020

Я преобразовал обученную модель keras в тензорный поток. js, и теперь я пытаюсь реализовать ее в react-native. Модель конвертируется нормально, но когда я пытаюсь ее загрузить, появляется сообщение:

Ошибка: неизвестная активация: swi sh

Я знаю, что можно создавать собственные слои, но я ' Я не уверен, применимо ли это к модели, которая уже была обучена.

Можно обойтись?

Код: 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>
    )
  }
}

Ответы [ 2 ]

0 голосов
/ 28 мая 2020

Я заставил это работать, выполнив следующие действия:

Создание класса swift в том же файле вместо его импорта и добавление

tf.serialization.registerClass(Swish)

после класса.

0 голосов
/ 27 мая 2020

Даже если модель уже обучена, загруженная модель в js должна будет посмотреть на реализацию слоев, чтобы увидеть, как на входе, что может быть на выходе слоя.

Error: Unknown activation: swish

Очевидно ошибка предполагает, что необходимо предоставить активацию уровня

ОБНОВЛЕНИЕ

Класс необходимо зарегистрировать

tf.serialization.registerClass(Swish)
...