Ошибка типа нейронной сети: неподдерживаемые типы операндов для +=: «Dense» и «str»

Я пытаюсь использовать нейронную сеть для прогнозирования цен на дома. Вот как выглядит верхняя часть набора данных:

    Price   Beds    SqFt    Built   Garage  FullBaths   HalfBaths   LotSqFt
    485000  3       2336    2004    2       2.0          1.0        2178.0
    430000  4       2106    2005    2       2.0          1.0        2178.0
    445000  3       1410    1999    1       2.0          0.0        3049.0

...

Я использую функцию активации ReLU. Когда я пытаюсь оценить свою модель на своих тестовых данных, я получаю это TypeError: unsupported operand type(s) for +=: 'Dense' and 'str'.

Я посмотрел типы столбцов из моего исходного фрейма данных, и все выглядит нормально.

print(df.dtypes)
## Output
#Price          int64
#Beds           int64
#SqFt           int64
#Built          int64
#Garage         int64
#FullBaths    float64
#HalfBaths    float64
#LotSqFt      float64
#dtype: object

Я не уверен, что я что-то испортил в своей нейронной сети, чтобы вызвать эту ошибку. Любая помощь приветствуется! Вот мой код для справки.

  • Подготовьте данные для сети
dataset = df.values
X = dataset[:, 1:8]
Y = dataset[:,0]

## Normalize X-Values
from sklearn import preprocessing
min_max_scaler = preprocessing.MinMaxScaler()
X_scale = min_max_scaler.fit_transform(X)
X_scale

##Partition Data
from sklearn.model_selection import train_test_split
X_train, X_val_and_test, Y_train, Y_val_and_test = train_test_split(X_scale, Y, test_size=0.3)
X_val, X_test, Y_val, Y_test = train_test_split(X_val_and_test, Y_val_and_test, test_size=0.5)
print(X_train.shape, X_val.shape, X_test.shape, Y_train.shape, Y_val.shape, Y_test.shape)
  • Начать построение модели
from keras.models import Sequential
from keras.layers import Dense

model = Sequential(
    Dense(32, activation='relu', input_shape=(7,)),
    Dense(1, activation='linear'))

model.compile(optimizer='sgd',
              loss='mse',
              metrics=['mean_squared_error'])

model.evaluate(X_test, Y_test)[1] ##Type Error is here!

person 325    schedule 28.10.2020    source источник
comment
Пожалуйста, добавьте полную трассировку к вашему вопросу, а не только отдельные части сообщения об ошибке.   -  person Dr. Snoopy    schedule 28.10.2020


Ответы (1)


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

import pandas as pd
from keras import backend as K

# Tried to recreate your dataset
df = pd.DataFrame({'Price': [485000, 430000, 445000, 485000, 430000, 445000, 485000, 430000, 445000, 485000, 430000, 445000],
                   'Beds': [3, 4, 3, 3, 4, 3, 3, 4, 3, 3, 4, 3],
                   'SqFt': [2336, 2106, 1410, 2336, 2106, 1410, 2336, 2106, 1410, 2336, 2106, 1410],
                   'Built': [2004, 2005, 1999, 2004, 2005, 1999, 2004, 2005, 1999, 2004, 2005, 1999],
                   'Garage': [2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 1],
                   'FullBaths': [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0],
                   'HalfBaths': [1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0],
                   'LotSqFt': [2178.0, 2178.0, 3049.0, 2178.0, 2178.0, 3049.0, 2178.0, 2178.0, 3049.0, 2178.0, 2178.0, 3049.0]})

dataset = df.values
X = dataset[:, 1:8]
Y = dataset[:,0]

## Normalize X-Values
from sklearn import preprocessing
min_max_scaler = preprocessing.MinMaxScaler()
X_scale = min_max_scaler.fit_transform(X)

##Partition Data
from sklearn.model_selection import train_test_split
X_train, X_val_and_test, Y_train, Y_val_and_test = train_test_split(X_scale, Y, test_size=0.3)
X_val, X_test, Y_val, Y_test = train_test_split(X_val_and_test, Y_val_and_test, test_size=0.5)
print(X_train.shape, X_val.shape, X_test.shape, Y_train.shape, Y_val.shape, Y_test.shape)
from keras.models import Sequential
from keras.layers import Dense

model = Sequential([
    Dense(32, activation='relu', input_shape=(7,)),
    Dense(1, activation='linear')]) # Layers are enclosed in square brackets

model.compile(optimizer='sgd',
              loss='mse',
              metrics=['mean_squared_error'])

model.fit(X_train, Y_train, verbose=1, validation_data=(X_val, Y_val))
model.evaluate(X_test, Y_test) ##Type Error is here!

Кроме того, я выполнял обучение и оценку (вызывая model.fit(X_train, Y_train, verbose=1, validation_data=(X_val, Y_val))) модели перед ее тестированием. В противном случае вы оцениваете наборы тестов в нейронной сети со случайно инициализированными весами.

person Silvio Gregorini    schedule 28.10.2020
comment
Спасибо. Это было очень полезно! Мой код работает сейчас. Есть ли у вас какие-либо рекомендации о том, как уменьшить среднеквадратичную ошибку? Мой кажется довольно высоким (60821168128.0000) - person 325; 28.10.2020
comment
К сожалению, это зависит от слишком многих вещей, которые нельзя решить без всего контекста. Но вы можете найти много учебных пособий и вариантов использования, похожих на вашу проблему, например это от Эндрю Нг. - person Silvio Gregorini; 28.10.2020