你能告诉我为什么我的神经网络只输出数千个值吗?他训练18000,分析999

问题描述 投票:0回答:1

由于某种原因,我的神经网络不想显示超过 1000 个。代码如下:

import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from sklearn.metrics import mean_squared_error

# Загрузка данных для обучения
train_data = pd.read_csv("_salary_train.csv")

# Преобразование категориальных переменных в числовые значения
train_data = pd.get_dummies(train_data, columns=['job'])

# Удаление столбца "Id"
train_data.drop(columns=['Id'], inplace=True)

# Масштабирование признаков
scaler = StandardScaler()
X = train_data.drop(columns=['salary'])
y = train_data['salary']
X_scaled = scaler.fit_transform(X)

# Создание и обучение модели
model = Sequential([
    Dense(64, activation='relu', input_shape=(X_scaled.shape[1],)),
    Dense(32, activation='relu'),
    Dense(1)
])
model.compile(optimizer='adam', loss='mean_squared_error')
model.fit(X_scaled, y, epochs=1000, batch_size=32)

# Загрузка данных для предсказания
test_data = pd.read_csv("salary_predict.csv")

# Преобразование категориальных переменных в числовые значения
test_data = pd.get_dummies(test_data, columns=['job'])

# Удаление столбца "Id", если он присутствует
if 'Id' in test_data.columns:
    test_data.drop(columns=['Id'], inplace=True)

# Удаление столбца "salary", если он присутствует
if 'salary' in test_data.columns:
    test_data.drop(columns=['salary'], inplace=True)

# Упорядочивание признаков для тестовых данных
test_data = test_data.reindex(columns=X.columns, fill_value=0)

# Масштабирование признаков
test_data_scaled = scaler.transform(test_data)

# Предсказания заработной платы
predictions = model.predict(test_data_scaled)

# Создание DataFrame с Id и предсказанными зарплатами
result_df = pd.DataFrame({'Id': range(1, len(predictions) + 1), 'salary': predictions.flatten()})

# Ограничение значений зарплат в пределах от 1 до 1 000 000
result_df['salary'] = result_df['salary'].clip(1, 1000000)

# Сохранение предсказаний в CSV файл
result_df.to_csv('predicted_salaries_2000.csv', index=False)

教育有18000种意义。然后他开到999下面,但只显示1000。为什么会这样?

Вот часть значении для обучения: 在此输入图像描述在此输入图像描述

python excel artificial-intelligence
1个回答
0
投票

如果您的神经网络输出数千个值而不是预期的 999 个,则可能有多种原因导致此行为:

  1. 输出层配置:检查神经网络模型中输出层的配置。确保输出层已正确配置为具有与所需输出维度相对应的 999 个神经元。如果输出层的神经元比预期多,它可能会产生数千个值的输出。

  2. 激活函数:验证神经网络输出层中使用的激活函数。确保激活函数适合任务和数据类型。对于回归任务,通常使用线性激活函数,而对于分类任务,根据类的数量,可以使用 softmax 或 sigmoid 激活函数。

  3. 损失函数:检查训练时使用的损失函数。损失函数的选择应与任务和输出数据类型保持一致。对于回归任务,通常使用均方误差(MSE)或平均绝对误差(MAE)损失函数。如果损失函数不适合该任务,可能会导致意外的输出值。

  4. 标准化或缩放问题:检查应用于输入和输出数据的预处理步骤。在将数据输入神经网络之前,确保数据被正确标准化或缩放到合适的范围。如果数据没有正确缩放,可能会导致意外的输出值。

  5. 训练数据不匹配:检查训练数据和用于分析的数据之间是否存在差异。确保用于分析的输入数据与训练期间使用的数据具有相同的维度和格式。不匹配的数据可能会导致推理过程中出现意外的输出值。

  6. 模型架构:查看神经网络模型的架构,包括层数、每层神经元和连接模式。如果模型架构过于复杂或过度参数化,可能会导致过度拟合或意外的输出行为。

  7. 调试和可视化:使用调试技术和可视化工具来检查推理过程中神经网络的中间输出和激活。这可以帮助识别网络行为中可能导致意外输出值的任何异常或不规则行为。

通过仔细检查这些因素并调试您的神经网络模型,您可以识别问题的根本原因并采取适当的纠正措施以确保其产生所需的输出值。

© www.soinside.com 2019 - 2024. All rights reserved.