我试图使用keras从数据集预测价格值.我遵循本教程:https://keras.io/examples/structured_data/structured_data_classification_from_scratch/,但当我开始拟合模型时,我得到了巨大的负损失和非常小的精度

Epoch 1/50
1607/1607 [==============================] - ETA: 0s - loss: -117944.7500 - accuracy: 3.8897e-05
2022-05-22 11:14:28.922065: I tensorflow/core/grappler/optimizers/custom_graph_optimizer_registry.cc:113] Plugin optimizer for device_type GPU is enabled.
1607/1607 [==============================] - 15s 10ms/step - loss: -117944.7500 - accuracy: 3.8897e-05 - val_loss: -123246.0547 - val_accuracy: 7.7791e-05
Epoch 2/50
1607/1607 [==============================] - 15s 9ms/step - loss: -117944.7734 - accuracy: 3.8897e-05 - val_loss: -123246.0547 - val_accuracy: 7.7791e-05
Epoch 3/50
1607/1607 [==============================] - 15s 10ms/step - loss: -117939.4844 - accuracy: 3.8897e-05 - val_loss: -123245.9922 - val_accuracy: 7.7791e-05
Epoch 4/50
1607/1607 [==============================] - 16s 10ms/step - loss: -117944.0859 - accuracy: 3.8897e-05 - val_loss: -123245.9844 - val_accuracy: 7.7791e-05
Epoch 5/50
1607/1607 [==============================] - 15s 10ms/step - loss: -117944.7422 - accuracy: 3.8897e-05 - val_loss: -123246.0547 - val_accuracy: 7.7791e-05
Epoch 6/50
1607/1607 [==============================] - 15s 10ms/step - loss: -117944.8203 - accuracy: 3.8897e-05 - val_loss: -123245.9766 - val_accuracy: 7.7791e-05
Epoch 7/50
1607/1607 [==============================] - 15s 10ms/step - loss: -117944.8047 - accuracy: 3.8897e-05 - val_loss: -123246.0234 - val_accuracy: 7.7791e-05
Epoch 8/50
1607/1607 [==============================] - 15s 10ms/step - loss: -117944.7578 - accuracy: 3.8897e-05 - val_loss: -123245.9766 - val_accuracy: 7.7791e-05
Epoch 9/50

This is my graph,就代码而言,它看起来像示例中的代码,但经过改编:

# Categorical feature encoded as string
desc = keras.Input(shape=(1,), name="desc", dtype="string")

# Numerical features
date = keras.Input(shape=(1,), name="date")
quant = keras.Input(shape=(1,), name="quant")

all_inputs = [
    desc,
    quant,
    date,
]

# String categorical features
desc_encoded = encode_categorical_feature(desc, "desc", train_ds)

# Numerical features
quant_encoded = encode_numerical_feature(quant, "quant", train_ds)
date_encoded = encode_numerical_feature(date, "date", train_ds)

all_features = layers.concatenate(
    [
        desc_encoded,
        quant_encoded,
        date_encoded,
    ]
)
x = layers.Dense(32, activation="sigmoid")(all_features)
x = layers.Dropout(0.5)(x)
output = layers.Dense(1, activation="relu")(x)
model = keras.Model(all_inputs, output)
model.compile("adam", "binary_crossentropy", metrics=["accuracy"])

数据集如下所示:

date    desc    quant   price
0   20140101.0  CARBONATO DE DIMETILO   999.00  1428.57
1   20140101.0  HIDROQUINONA    137.00  1314.82
2   20140101.0  1,5 PENTANODIOL TECN.   495.00  2811.60
3   20140101.0  SOSA CAUSTICA LIQUIDA 50%   567160.61   113109.14
4   20140101.0  BOROHIDRURO SODICO  6.24    299.27

此外,我正在使用以下方法将日期从YYYY-MM-DD转换为数字:

dataset['date'] = pd.to_datetime(dataset["date"]).dt.strftime("%Y%m%d").astype('float64')

我做错了什么(

编辑:我认为教程中的编码器功能是规范化数据,但事实并非如此.有没有其他你们认识的教程可以更好地指导我?损失问题已修复!(由于正常化)

推荐答案

您似乎对模型的组件很困惑.

  1. 二进制交叉熵是classification loss,你的问题是regression->;使用MSE.同样,"精度"对回归没有意义,也将其更改为MSE.
  2. 你的数据是huge,因此你的损失是巨大的.如果数据中的价格为113109.14,那么如果您的模型一开始不好,并且显示为0,该怎么办?您将损失约113109.14000^2=113109.140000000.Normalise your data,在您的情况下-输出变量(目标、价格)介于-1和1之间
  3. some个用例中,输出神经元应该具有激活功能,但除非您知道why您正在这样做,否则将其保留为线性是一个更安全的 Select .
  4. 辍学是一种让你的模型达到regularising分的方法,不要让它达到start分,总是从最简单的模型开始,并确保在try 最大化测试分数之前可以达到learn分.
  5. 神经网络不会外推,以原始格式输入不断增长的信号(日期)几乎肯定会导致问题.

Python相关问答推荐

在极点中读取、扫描和接收有什么不同?

jsonschema日期格式

需要帮助使用Python中的Google的People API更新联系人的多个字段'

获取git修订版中每个文件的最后修改时间的最有效方法是什么?

裁剪数字.nd数组引发-ValueError:无法将空图像写入JPEG

比较两个有条件的数据帧并删除所有不合格的数据帧

来自任务调度程序的作为系统的Python文件

S最大值除以最小值,然后减1的结果是什么?

将.exe文件从.py转换后出现问题.";ModuleNotFoundError:没有名为';Selify;的模块

在极坐标中添加列总计行

极点在没有Groupby的情况下聚合

在Django管理后台保存模型时保存当前用户

如何在上一次迭代中跳过某些内容(&q;)?

同一单元格中有两个条目的NumPy矩阵不起作用

如何在PANAS列中应用带有多个参数的自定义函数

为列PANAS中的每个字符串值创建累计和列

如何让QML菜单考虑布局镜像?

是否有与字节文字等价的函数?

使用Pandas DataFrame从CSV文件中获取特定值

如何在我的sveltekit应用程序中运行带有虚拟.venv的python脚本?