Python ошибка: ожидается 2 измерения, но получен массив с формой (45, 4, 3, 2, 3, 4, 3) - PullRequest
0 голосов
/ 09 февраля 2020

Я тренирую модель, в которой X_train имеет форму (104, 4), а Y_train имеет форму (45, 4), например:

model = Sequential()
model.add(layers.Dense(50, input_dim=x_train.shape[1], activation='relu'))
model.add(layers.Dense(40, activation='relu'))
model.add(layers.Dense(30, activation='relu'))
model.add(layers.Dense(25, activation='relu'))
model.add(layers.Dense(3, activation='softmax'))

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

history = model.fit(x_train, y_train,
                batch_size = 10, epochs = 50,
                verbose = 1, validation_split = 0.3)

Когда я пытаюсь уместить свои данные, это выдается ошибка:

Ошибка при проверке цели: ожидалось, что плотность_1 имеет 2 измерения, но получен массив с формой (45, 4, 3, 2, 3, 4, 3)

Я также пытался добавить слой Flatten перед первым плотным слоем, но это приводит к следующей ошибке:

Вход 2 несовместим со слоем flatten_3: ожидается min_ndim = 3, найдено ndim = 2

Я не уверен, как исправить размеры. Можете ли вы помочь мне исправить это? Спасибо!

1 Ответ

0 голосов
/ 10 февраля 2020

Я выложу весь сценарий:

import pandas as pd
import numpy as np
from keras.utils import np_utils
import keras
from keras.models import Sequential 
from keras import layers
from keras.optimizers import SGD

from sklearn.model_selection import train_test_split

from sklearn import preprocessing
from sklearn.preprocessing import LabelEncoder,OneHotEncoder

df = pd.read_csv("http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data",header=0)

df.columns = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width',"Class"]

df, cl = (df.iloc[:,0:4],df['Class'])

df_scaler = preprocessing.MinMaxScaler(feature_range=(0,1))
df1 = df_scaler.fit_transform(df)

cl1 = LabelEncoder().fit_transform(cl)

x_train, y_train, x_test, y_test = train_test_split(df1,cl1,test_size = 0.3)

y_train = np_utils.to_categorical(y_train, 3)
y_test = np_utils.to_categorical(y_test,3)

model = Sequential()
model.add(layers.Dense(50,input_dim=x_train.shape[1],activation='relu'))
model.add(layers.Dense(40,activation='relu'))
model.add(layers.Dense(30,activation='relu'))
model.add(layers.Dense(25,activation='relu'))
model.add(layers.Dense(3,activation='softmax'))

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

history = model.fit(x_train, y_train,batch_size = 10, epochs = 50,verbose = 1,validation_split = 0.3)

И это ошибка, которую он мне дает:

ValueError                                Traceback (most recent call last)
<ipython-input-95-4c538cd97d59> in <module>()
      1 history = model.fit(x_train, y_train,
      2                     batch_size = 10, epochs = 50,
----> 3                     verbose = 1, validation_split = 0.3)

2 frames
/usr/local/lib/python3.6/dist-packages/keras/engine/training_utils.py in standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix)
    129                         ': expected ' + names[i] + ' to have ' +
    130                         str(len(shape)) + ' dimensions, but got array '
--> 131                         'with shape ' + str(data_shape))
    132                 if not check_batch_axis:
    133                     data_shape = data_shape[1:]

ValueError: Error when checking target: expected dense_91 to have 2 dimensions, but got array with shape (45, 4, 3, 2, 3, 4, 3)

Надеюсь, это поможет вам, я подписан на онлайн Конечно, и я не могу понять, почему у меня ошибка.

Спасибо

...