Потеря Tensorflow JS не меняется

#javascript #tensorflow

#javascript #tensorflow

Вопрос:

Я относительный новичок в нейронных сетях и совершенно новичок в tensorflow js. Я пытаюсь обучить простую модель для прогнозирования цены объекта недвижимости. (https://www.kaggle.com/shree1992/housedata ). Однако, когда я обучаю модель, потеря никогда не меняется, и прогнозы отклоняются на огромные суммы. Что я здесь делаю не так?

Это функции, которые я использую для прогнозирования цены:

 {
  bedrooms: 2,
  bathrooms: 2.5,
  sqft_living: 1590,
  sqft_lot: 2656,
  floors: 2,
  waterfront: 0,
  view: 0,
  condition: 3
}
{ price: 305000 }
========
Code
========

const tf = require('@tensorflow/tfjs');
require('@tensorflow/tfjs-node');

// const csvUrl =
// 'https://storage.googleapis.com/tfjs-examples/multivariate-linear-regression/data/boston-housing-train.csv';
const csvUrl = "file://./data.csv"


async function run() {
// We want to predict the column "medv", which represents a median value of
// a home (in $1000s), so we mark it as a label.
    const csvDataset = tf.data.csv(
        csvUrl, {
        columnConfigs: {
            price: {
            isLabel: true
            }
        }
    });
        
    // Number of features is the number of column names minus one for the label
    // column.
    const numOfFeatures = (await csvDataset.columnNames()).length - 1;
    console.log(csvDataset.columnNames());
    // Prepare the Dataset for training.
    const flattenedDataset =
        csvDataset
        .map(({xs, ys}) =>
        {
            // Convert xs(features) and ys(labels) from object form (keyed by
            // column name) to array form.
            // console.log(xs);
            // console.log(ys);
            return {xs:Object.values(xs), ys:Object.values(ys)};
        })
        .batch(10);

    // Define the model.
    const model = tf.sequential();
    model.add(tf.layers.dense({
        inputShape: [numOfFeatures],
        units: 1,
    }));
    // model.add(tf.layers.dense({
    //     units:1, 
    //     activation: 'softmax'
    // }));
    model.compile({
        optimizer: 'sgd', 
        loss: 'binaryCrossentropy', 
        lr:1
    });

    // Fit the model using the prepared Dataset
    await model.fitDataset(flattenedDataset, {
        epochs: 10,
        callbacks: {
        onEpochEnd: async (epoch, logs) => {
            console.log(epoch   ':'   logs.loss);
        }
        }
    });
    // let test = tf.tensor2d([[0.26169, 0, 9.9, 0, 0.544, 6.023, 90.4, 2.834, 4, 304, 18.4, 11.72]])
    let test = tf.tensor2d([[3,1.5,1340,7912,1.5,0,0,3],[5,2.5,3650,9050,2,0,4,5]])
    model.predict(test).print();
}

run();

 

Комментарии:

1. может быть, это не связано, но вы используете сверхвысокую скорость обучения 1 , она должна быть примерно 0,000x или не более 0,00x

2. какова ваша цель? если это цена, которая является непрерывным значением, которое вы не можете использовать binaryCrossentropy , вам следует использовать RMSE (среднеквадратичная ошибка) или MSE (среднеквадратичная ошибка) или что-то подобное.

3. Кроме того, вы должны нормализовать (вычесть среднее значение и разделить на стандартное отклонение) свои функции для лучшей конвергенции, а не просто использовать их как есть.