Tensorflow.js Несоответствие размеров модели

#javascript #tensorflow #conv-neural-network #png #autoencoder

#javascript #тензорный поток #conv-нейронная сеть #png #автоэнкодер

Вопрос:

Я новичок в tensoflow.js , У меня проблема с созданием моделей CNN из-за несоответствия размеров. У меня есть использование 3D-массива tf.browser.fromPixels(image); .

Но когда я пытаюсь обучить свой ИИ, он не запускается, и я получил сообщение : Uncaught (in promise) Error: Error when checking target: expected dense_Dense2 to have shape [6,6,4], but got array with shape [6,6,3].

Вот полный код :

 image = new Image(32, 32);
data = tf.browser.fromPixels(image); //to get pixel array

model = tf.sequential();
encoder = tf.layers.dense({units: 4, batchInputShape:[6, 6, 3], activation: 'relu', kernelInitializer:"randomNormal", biasInitializer:"ones"});
decoder = tf.layers.dense({units: 4, activation: 'relu'});
model.add(encoder);
model.add(decoder);
model.compile({loss:'meanSquaredError', optimizer:tf.train.adam()});

async function botTraining(model, epochs = 60){ //train ai 60 epochs
    history = 
    await model.fit(data, data,{ epochs: epochs   1,
        callbacks:{
            onEpochEnd: async(epoch, logs) =>{
                console.log("Epoch:"   epoch   " Loss:"   logs.loss);
            }
        }
    });
}
 

Ответ №1:

Хорошо, вот мой код :

 image = new Image(32, 32);
data = tf.browser.fromPixels(image); //to get pixel array

model = tf.sequential();
encoder = tf.layers.dense({units: 4, batchInputShape:[6, 6, 3], activation: 'relu', kernelInitializer:"randomNormal", biasInitializer:"ones"});
decoder = tf.layers.dense({units: 4, activation: 'relu'});
model.add(encoder);
model.add(decoder);
model.compile({loss:'meanSquaredError', optimizer:tf.train.adam()});

async function botTraining(model, epochs = 60){ //train ai 60 epochs
    history = 
    await model.fit(data, data,{ epochs: epochs   1,
        callbacks:{
            onEpochEnd: async(epoch, logs) =>{
                console.log("Epoch:"   epoch   " Loss:"   logs.loss);
            }
        }
    });
}
 

Я понял, что мое « bachInputSize » нужно установить так же, как decoder единицы измерения

Это исправленный код :

 image = new Image(4, 4);
data = tf.browser.fromPixels(image);

model = tf.sequential();
encoder = tf.layers.dense({units: 3, batchInputShape:[null, null, 3], activation: 'relu', kernelInitializer:"randomNormal", biasInitializer:"ones"});
decoder = tf.layers.dense({units: 3, activation: 'relu'});
model.add(encoder);
model.add(decoder);
model.compile({loss:'meanSquaredError', optimizer:tf.train.adam()});

async function botTraining(model, epochs = 60){
    history = 
    await model.fit(data, data,{ epochs: epochs   1,
        callbacks:{
            onEpochEnd: async(epoch, logs) =>{
                console.log("Epoch:"   epoch   " Loss:"   logs.loss);
            }
        }
    });
}