Керас CNN с данными 1D - PullRequest
       1

Керас CNN с данными 1D

1 голос
/ 04 апреля 2020

Каждый экземпляр моих данных представляет собой массив из 72 элементов. Я пытаюсь создать 1D CNN для некоторой классификации, но я получил эту ошибку: Ошибка при проверке цели: ожидалось, что плотность_3 имеет 3 измерения, но получен массив с формой (3560, 1)

Это мой код :

training_features = np.load('features.npy')
training_labels = np.load('labels.npy')
training_features = training_features.reshape(-1, 72, 1)

model = Sequential()
model.add(Conv1D(64, 3, activation='relu', input_shape=(72, 1)))
model.add(MaxPooling1D(2))
model.add(Conv1D(64, 3, activation='relu'))
model.add(MaxPooling1D(2))
model.add(Dense(64, activation='relu'))
model.add(Dense(28, activation='softmax'))

model.compile(Adam(lr=.0001), loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(training_features, training_labels, batch_size=32, epochs=3, validation_split=0.1)

Я новичок. Извините, если у меня плохое понимание.

Ответы [ 2 ]

0 голосов
/ 05 апреля 2020

Проверьте, правильно ли введены ваши данные. Можете ли вы поделиться двумя * .npy файлами (или хотя бы формами ваших входов).

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv1D, Dense, MaxPooling1D, Flatten
from tensorflow.keras.optimizers import Adam

model = Sequential()
model.add(Conv1D(64, 3, activation='relu', input_shape=(72, 1)))
model.add(MaxPooling1D(2))
model.add(Conv1D(64, 3, activation='relu'))
model.add(MaxPooling1D(2))
model.add(Flatten())
model.add(Dense(64, activation='relu'))
model.add(Dense(28, activation='softmax'))

model.compile(Adam(lr=.0001), loss='categorical_crossentropy', metrics=['accuracy'])
#model.fit(training_features, training_labels, batch_size=32, epochs=3, validation_split=0.1)

model.summary()

Model: "sequential_4"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv1d_7 (Conv1D)            (None, 70, 64)            256       
_________________________________________________________________
max_pooling1d_6 (MaxPooling1 (None, 35, 64)            0         
_________________________________________________________________
conv1d_8 (Conv1D)            (None, 33, 64)            12352     
_________________________________________________________________
max_pooling1d_7 (MaxPooling1 (None, 16, 64)            0         
_________________________________________________________________
flatten (Flatten)            (None, 1024)              0         
_________________________________________________________________
dense_4 (Dense)              (None, 64)                65600     
_________________________________________________________________
dense_5 (Dense)              (None, 28)                1820      
=================================================================
Total params: 80,028
Trainable params: 80,028
Non-trainable params: 0
_________________________________________________________________

Надеюсь, это поможет. Спасибо!

0 голосов
/ 04 апреля 2020

Проблема в том, что вы начинаете с трехмерного слоя, но никогда не уменьшаете размерность ни в одном из следующих слоев. Попробуйте добавить model.add(Flatten()) перед первым плотным слоем.

...