在tensorflow.js中使用fitDataset时损失不会减少

问题描述

我有一个127,581行的CSV文件,如下所示:

PurchasePrice,LivingArea,GardenArea,HasBalcony,HasElevator,HasTerrace,IncludedParkingSpots,Rooms,YearOfConstruction,FirstTimeUse
178695,"35.5",Yes,2,Yes
315000,112,No,No
589000,"124.33","54.69",5,Yes
387030,"79.01",3,83,Yes
...

我正在尝试预测PurchasePrice。这是我的代码:(我没有遗漏任何东西,因为我不知道哪一部分错了-对不起)

import { data,layers,sequential,TensorContainerObject,train } from '@tensorflow/tfjs-node';

enum BooleanValue {YES = 'Yes',NO = 'No'}

interface MapInput extends TensorContainerObject {
    xs: { LivingArea: number | undefined,GardenArea: number,HasBalcony: BooleanValue,HasTerrace: BooleanValue,HasElevator: BooleanValue },ys: { PurchasePrice: number | undefined }
}

const MAX_LIVING_AREA = 300;
const MAX_GARDEN_AREA = 500;

(async () => {
    const dataset = data.csv('file://.\\data.csv',{
        columnConfigs: {
            PurchasePrice: {
                dtype: 'float32',isLabel: true,},LivingArea: {
                dtype: 'float32',GardenArea: {
                dtype: 'float32',default: 0,HasBalcony: {
                dtype: 'string',HasTerrace: {
                dtype: 'string',HasElevator: {
                dtype: 'string',configuredColumnsOnly: true,hasHeader: true,delimiter: ',',}).filter((entry: { xs: { LivingArea: number | undefined },ys: { PurchasePrice: number | undefined } }) => (
        entry.xs.LivingArea !== undefined && entry.ys.PurchasePrice !== undefined
    )).map(({xs,ys}: MapInput) => {
        const values = [
            xs.LivingArea / MAX_LIVING_AREA,xs.GardenArea / MAX_GARDEN_AREA,xs.HasBalcony === BooleanValue.YES ? 1 : 0,xs.HasElevator === BooleanValue.YES ? 1 : 0,xs.HasTerrace === BooleanValue.YES ? 1 : 0,];
        const label = ys.PurchasePrice / 2_000_000;
        return {xs: values,ys: label};
    });
    const trainData = dataset.shuffle(100).batch(32);

    const model = sequential();
    model.add(layers.dense({units: 10,activation: 'relu',inputShape: [5]}));
    model.add(layers.dense({units: 50,activation: 'relu'}));
    model.add(layers.dense({units: 20,activation: 'relu'}));
    model.add(layers.dense({units: 1,activation: 'softmax'}));
    model.compile({optimizer: train.adam(),loss: 'meanSquaredError'});
    await model.fitDataset(trainData,{
        epochs: 10,});
})();

运行此命令时,将得到以下输出:

Epoch 1 / 10

32315ms 8105us/step - loss=0.676 
Epoch 2 / 10

32267ms 8093us/step - loss=0.676 
Epoch 3 / 10

31032ms 7783us/step - loss=0.676
...

...这似乎不正确。损失应该在每个时代消失,对吗?

我尝试调整优化器的学习率,使用validationDataskip()添加一个take()数据集,弄乱了批处理大小以及许多其他东西我什至不记得了。

我正在学习ML,尚未成功训练模型,所以我想我从根本上错了。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...