关于机器学习和数据框架的问题

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

我发现了一个关于训练数据集层的问题:

ValueError: Input 0 of layer "sequential_4" is incompatible with the layer: expected shape=(None, 7), found shape=(None, 5)

这是我的代码:

import pandas as pd
from sklearn.model_selection import train_test_split
from keras.models import Sequential
from keras.layers import Dense, Dropout
from keras.optimizers import Adam
from keras.regularizers import l2
from sklearn.metrics import mean_squared_error
import matplotlib.pyplot as plt
import numpy as np

def carica_dataset():
dataset = pd.read_csv("dataset.csv")
return dataset

def carica_modello():
    dataset = carica_dataset()
    dataset = pd.get_dummies(dataset, columns=['Località'])
    print(dataset)
    X = dataset.drop(columns=['Prezzo'])
    y = dataset['Prezzo']

    X_train, X_test, y_train, y_test = train_test_split(X, y)

    model = Sequential()

    model.add(Dense(64, activation='relu', input_dim=X_train.shape[1],  kernel_regularizer=l2(0.1)))
    model.add(Dropout(0.5))
    model.add(Dense(32, activation='relu',  kernel_regularizer=l2(0.1)))
    model.add(Dropout(0.5))
    model.add(Dense(16, activation='relu', kernel_regularizer=l2(0.1)))
    model.add(Dropout(0.5))
    model.add(Dense(8, activation='relu', kernel_regularizer=l2(0.1)))
    model.add(Dropout(0.5))
    model.add(Dense(1, activation='linear', kernel_regularizer=l2(0.1)))
    adam = Adam()

    model.compile(loss='mean_squared_error', optimizer=adam, metrics=['accuracy'])

    model.fit(X_train, y_train, epochs=100, batch_size=64)


    return model

 dataset = carica_dataset()
 model = carica_modello()
 fields = {
    'Superficie': float,
    'Numero di stanze da letto': int,
    'Numero di bagni': int,
    'Anno di costruzione': int,
    'Località': str
     }
 user_data = {}

for key,value in fields.items():
    while True:
        try:
            user_input = input(f"inserisci il valore di: {key}")
            user_data[key] = value(user_input)
            break
        except ValueError:
            print(f"inserisci un valore valido per {key}")
dataframe = pd.DataFrame([user_data])
dataframe = pd.get_dummies(dataframe, columns=['Località'])

valori = dataframe.values

prediction = model.predict(valori)[0][0]
print(f'La predizione del prezzo è: {prediction} €')

我尝试更改层数,但每次都发现同样的问题,我该怎么办?

我的数据集有 6 列 -1,这是我需要预测的列,所以 5 列

python machine-learning keras deep-learning
1个回答
0
投票

尝试在模型定义之前打印 X_train.shape[1] 并在模型拟合之前再次打印以验证特征数量是否一致,或者尝试设置 input_dim=5。

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