tenorflow.js — прогноз изображения — основной цвет изображения
Я надеюсь, что вы можете мне помочь. Я немного дурачился с моей первой моделью тензорного потока.js и застрял, улучшая ее.
Задача, которую он должен предсказать, звучит «просто»: получить цвет объекта в изображении.
Но я застрял, может быть, кто-то может дать мне подсказку
Моя модель:
-
последовательный
-
conv2d: фильтры: 32, kernelSize: [3, 3], заполнение: «то же самое», inputShape: [32, 32, 3], kernelInitializer: «varianceScaling»,
-
активация: relu
-
maxPooling2D: PoolSize: [2,2] шагов: 2
-
dropOut: ставка 0,5
-
conv2d: фильтры: 64, kernelSize: [3, 3], отступы: «то же самое», kernelInitializer: «varianceScaling»,
-
активация: relu
-
maxPooling2D: PoolSize: [2,2] шагов: 2
-
dropOut: ставка 0,5
-
расплющить
-
плотный: единиц: 1024
-
активация: relu
-
Пакетная нормализация: ось -1
-
отсев: 0,5
-
плотный: единицы измерения (например, 22)
-
активация: softmax
резюме моей модели
Мои данные
- один список всех цветов, которые существуют внутри данных (всего 22 записи)
- массив изображений dir для их сопоставленного примера цвета [[dir ={amp}gt; «img / image1.jpeg», label: «red»], [dir ={amp}gt; «img / image2.jpeg», label: «black»]
Мой процесс
Для изображений считайте изображение с помощью tf.node.decodeJpeg
Нормализуйте это и вставьте в массив тензоров
const offset = tf.scalar(127.5); var tensor=tf.node.decodeJpeg(img, 3).resizeNearestNeighbor([32,32]) tensor = tensor.toFloat(); tensor = tensor.sub(offset).div(offset); imageTensorArray.push(tensor);
для этикетки
получить числовой индекс меток из массива Alllabels и oneHot его бинаризовать.
var imageLabels = imageLabelArray.map(function (d) { return allLabelsUnique.indexOf(d[1]); //index of label String in allLabels }); const imageLabelsHot=tf.oneHot(imageLabels, allLabelsUnique.length);
скомпилировать модель
const optimizer = tf.train.adam(1e-3, 1e-3 / 20); model.compile({ optimizer: optimizer, loss: "categoricalCrossentropy", metrics: ['accuracy'] });
Модель поезда
await model.fit(trainImageTensors //5000, trainImageLabels //5000, { ///all in the right order epochs: 20, verbose: 1, validationSplit: 0.3, shuffle: 1, batchSize: 32 });
Теперь моя проблема (ы):
-
акк становится лучше — val_acc застрял на ~ 0.339, потеря: уменьшение — val_loss не зависит от эпох или количества тренировочных данных
-
прогноз всегда черный
Я много играл, но не могу получить подсказку «один» для помощи
- trainImageTensors = tf.stack (buildImageToTensor (image)) — это может быть проблемой?
Заранее спасибо за помощь