Ошибка значения: ввод 0 слоя «max_pooling1d» несовместим со слоем: ожидаемый ndim = 3, найденный ndim = 4. Получена полная форма: (Нет, 51644, 29, 32)

#python #tensorflow #machine-learning #keras #deep-learning

#python #тензорный поток #машинное обучение #keras #глубокое обучение

Вопрос:

Я создаю модель CNN 1D для двоичной классификации, и файл, который я использовал, — это csv-файл, как я могу решить эту ошибку ?….Заранее спасибо

это мой код: введите описание изображения здесь
введите описание изображения здесь

ошибка: ошибка значения: ввод 0 слоя «max_pooling1d» несовместим со слоем: ожидаемый ndim = 3, найдено ndim = 4. Получена полная форма: (Нет, 51644, 29, 32) введите описание изображения здесь

Комментарии:

1. Пожалуйста, разместите реальный текстовый код, а не моментальные снимки.

2. импортировать numpy как np импортировать pandas как pd из sklearn.model_selection импортировать train_test_split из keras.модели импортировать последовательно из keras. слои импортируются плотными из keras. слои импортируют выпадающие элементы из keras. слои импортируют Сглаживают импортируют tensorflow как tf из keras. слои.сверточный импорт Conv1D из keras. слои.сверточный импорт MaxPooling1D из sklearn.предварительная обработка импорта LabelEncoder,OneHotEncoder данные = pd.read_csv(‘dataset.csv’, low_memory=False) данные = data.drop([64555], axis=0) y = data.label x = data.drop(‘label’, axis=1)

3. model = Sequential() model.add(Conv1D(32, 5, padding= ‘valid’, input_shape=(train.shape[0], train.shape[1], 1), активация = ‘relu’, шаги = 1 )) model.add(MaxPooling1D(pool_size=2, шаги = 1, заполнение = ‘valid’)) model.add(Conv1D(64, 5, заполнение = ‘valid’, активация = ‘relu’, шаги = 1)) model.add(MaxPooling1D(pool_size= 2, шаги = 1, заполнение = ‘valid’)) model.add(выпадающий (0.2)) model.add(Плотный (128, активация = ‘relu’)) model.add(Плотный (50, активация = ‘relu’)) model.add(плотный (10, активация = ‘sigmoid’)) model.compile(потеря= ‘categorical_crossentropy’, optimizer= ‘adam’, metrics= [‘точность’])

4. model.fit(train, train_label, epochs= 3, batch_size= 32) оценка = model.evaluate(test, test_label, batch_size=128)

5. На самом деле это не так, я имел в виду опубликовать код вместе с самим вопросом. Пожалуйста, отредактируйте свой вопрос и скопируйте-вставьте туда код. После вставки кода выберите код и нажмите на {} кнопку, код будет отформатирован сам. Подробнее о сложности смотрите здесь: meta.stackexchange.com/a/210852/659522 … Также я опубликовал ответ, надеюсь, это поможет …. спасибо 🙂

Ответ №1:

Измените значение input_shape с (train_shape[0], train_shape[1], 1) на (train_shape[1], 1) . Как вы используете Conv1D , предполагая, что вы работаете с данными последовательности. Таким образом, в данном случае train_shape[0] это batch_size , train_shape[1] number of time-steps то есть, sequence length и последнее 1 — это number of features в каждой временной метке.

Важно то, keras что для этого не требуется вводить значение batch_size , оно автоматически устанавливается по умолчанию None , и форма ввода становится (None, train_shape[1], 1) автоматической, так что она может работать с любыми размерами пакета, поэтому нет необходимости вводить первое измерение. Но если вы хотите ввести значение batch size самостоятельно, используйте batch_input_shape вместо input_shape .

Также используйте softmax функцию в выходном слое вместо sigmoid , так как у вас более одного нейрона в выходном слое.

Комментарии:

1. я изменил форму ввода на (train.shape[1],1), но также получил следующую ошибку: Ошибка значения: фигуры (None, 1) и (None, 23, 10) несовместимы со строкой (model.fit(train, train_label, epochs = 3,) )

2. @mohammadalani Я отредактировал ответ.

3. у меня есть только два вывода (обычный или вредоносный), по этой причине я использовал сигмоид

4. @mohammadalani но вы добавили 10 нейроны в выходной плотный слой, почему? Для этого требуется, чтобы у вас были 10 классы. Для двоичной классификации либо используйте только 1 neuron, если вы хотите использовать sigmoid , либо используйте 2 нейроны с. softmax

5. спасибо, я отредактировал эту строку с помощью 2 нейронов

Ответ №2:

Ваши данные являются 2D (как на картинке), в то время как вы пытаетесь использовать модель, которая принимает одномерные объекты (последовательности). Вам либо нужно использовать модель, которая принимает тип данных, с которыми вы хотите работать, либо вам нужно преобразовать ваши данные в соответствии с вашей моделью.

Комментарии:

1. мои данные представляют собой файл csv (лист Excel), но при запуске кода возникла эта ошибка

2. этот комментарий не имеет ничего общего с ответом.