Я обучил модель CNN на некоторых изображениях по примеру https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html. Код моей модели идентичен, я просто обучил его на другом наборе данных изображений: также для классификации между двумя классами.
Результаты - это то, что вы ожидаете от обучающего набора: изображения классифицируются правильно или 0 или 1.
Я сохранил модель в удобном для тензорного формата формате после «Альтернатива: использовать API-интерфейс Python для экспорта напрямую вРаздел "Формат слоев TF.js" https://js.tensorflow.org/tutorials/import-keras.html
Однако, когда я пытаюсь получить доступ к результатам на html-странице с помощью javascript, я получаю 1 для почти каждого изображения (или близко к нему): даже если изображениедает 0 в Керасе.
Я даже сохранил изображение в качестве тензора в JSON, и я получаю 0 в Керасе и 1 в TensorflowJS.Это ошибка или я где-то допустил ошибку?
Вот мой код в TensorflowJS для доступа к json:
<html>
<head>
<!-- Load TensorFlow.js -->
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@0.13.0"></script>
<script>
// https://stackoverflow.com/a/18324384/2730032
function callAjax(url, callback){
var xmlhttp;
// compatible with IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function(){
if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
callback(xmlhttp.responseText);
}
}
xmlhttp.open("GET", url, true);
xmlhttp.send();
}
tf.loadModel('/model.json').then(model => {
callAjax('/tensor.json', res => {
arr = JSON.parse(res);
const example = tf.tensor(arr).reshape([1, 150, 150, 3]);
const prediction = model.predict(example);
prediction.data().then(res => {
console.log('PREDICTION JS', res[0]);
})
});
})
</script>
</head>
<body>
</body>
</html>
А вот мой код на Python для того же:
import json
import numpy as np
import tensorflowjs as tfjs
model = tfjs.converters.load_keras_model('model.json')
with open('tensor.json', 'r') as f:
r = json.load(f)
arr = np.array([np.array([np.array(v) for v in l]) for l in r])
print('PREDICTION PYTHON', model.predict(arr[np.newaxis,...])[0][0])
Я получаю PREDICTION JS 1 и PREDICTION PYTHON 0.0 для точно таких же данных и той же модели: кто-нибудь видит какие-либо проблемы в моем коде?
EDIT1: Я нахожусь на Xubuntu 18.04.1 LTS и использую следующие версии программного обеспечения:
Python 3.6.6
Keras 2.2.4
tensorflow 1.11.0
tensorflowjs 0.6.2
numpy 1.15.2
EDIT2: Я открыл следующую проблему https://github.com/tensorflow/tfjs/issues/776, и с тех пор она была исправлена.