у меня возникла проблема при использовании cnn для классификации более 10000 классов. как я могу это решить?

#python #python-3.x #tensorflow #keras #deep-learning

#python #python-3.x #тензорный поток #keras #глубокое обучение

Вопрос:

это моя модель с использованием conv1d

модель имеет класс 5000 итак, как я могу создавать слои с помощью tensorflow или keras, если я увеличиваю время загрузки и зависания моей системы. здесь я применил adam optimizer и функцию потери mean_square_error, поэтому я получил очень низкий уровень точности. как я могу это исправить «‘ epochs = 3 batch_size = 35

 model = Sequential()
print(x_train.shape[1],1)
                                
model.add(Conv1D(16, 3, padding='same', activation='relu', input_shape=(128,1)))#x.shape[1:])) # Input shape: (96, 96, 1)
model.add(MaxPooling1D(pool_size=1))
                              
model.add(Conv1D(32, 3, padding='same', activation='relu'))
model.add(MaxPooling1D(pool_size=1))
model.add(Dropout(0.25))                            
model.add(Conv1D(64, 3, padding='same', activation='relu'))
model.add(MaxPooling1D(pool_size=1))                             
model.add(Conv1D(128, 3, padding='same', activation='relu'))
model.add(MaxPooling1D(pool_size=1))                             
model.add(Conv1D(256, 3, padding='same', activation='relu'))
model.add(MaxPooling1D(pool_size=1))                             
# Convert all values to 1D array
model.add(Flatten())                             
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(5823))


##checkpointer = ModelCheckpoint(filepath='checkpoint1.hdf5', verbose=1, save_best_only=True)

# Complie Model
model.compile(optimizer='adam', loss='mean_squared_error', metrics=['accuracy'])
history=model.fit(x_train, y_train_binary,
          batch_size=batch_size,
          epochs=epochs,
          verbose=1,
          validation_data=(x_test, y_test_binary))
 

»’

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

1. привет, не могли бы вы указать размер входных данных, пожалуйста? И что это за данные, что вы пытаетесь предсказать?

2. Запишите более подробную информацию о ваших данных. Одно из предложений — удалить все операторы печати и использовать model.summary(), чтобы получить слои модели и количество параметров в каждом слое с формами входных и выходных данных. model.summary() будет очень полезен. Что касается функции потерь, используйте категориальную кроссэнтропию для многоклассовой классификации. Для более чем 5000 классов убедитесь, что у вас достаточно данных, чтобы получить достойную точность.

3. Я извлек данные из изображений. набор данных содержит 128 столбцов и 16000 строк

Ответ №1:

вы должны активировать свой последний слой с помощью функции типа softmax (лучший выбор для классификации muli). Как сказано в комментариях, categorical_crossentropy в вашем случае лучше использовать функцию потерь, если ваши метки закодированы одним нажатием (если не используются sparse_categorical_crossentropy ).

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

1. Последний слой я использовал как softmax, а функцию потерь — как categorical_crossentropy в этом случае я получил меньшее количество потерь, но точность не улучшилась. если я попытаюсь увеличить размер слоев и размер пакета, у системы возникнут проблемы

2. Я думаю, что проблема возникает из y_train_binary и y_test_binary , пожалуйста, предоставьте дополнительную информацию и отредактируйте свой вопрос