Я использовал последовательную модель в кератах для категориальной классификации.
данные:
x_train = np.random.random((5000, 20))
y_train = keras.utils.to_categorical(np.random.randint(10, size=(5000, 1)), num_classes=10)
x_test = np.random.random((500, 20))
y_test = keras.utils.to_categorical(np.random.randint(10, size=(500, 1)), num_classes=10)
важно масштабирование функции:
scaler = StandardScaler()
scaler.fit(x_train)
x_train = scaler.transform(x_train)
x_test = scaler.transform(x_test)
модель
model = Sequential()
model.add(Dense(64, activation='relu', input_dim=20))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))
model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy'])
model.fit(x_train, y_train,
epochs=100,
batch_size=32)
данные для прогнозирования
z = np.random.random((9999000, 20))
Должен ли я масштабировать эти данные? Как масштабировать эти данные?
predictions = model.predict_classes(z)
Как вы видите, обучающие и тестовые образцы - это всего лишь несколько по сравнению с прогнозируемыми данными (z
). Использование скейлера с x_train
для перемасштабирования x_test
кажется нормальным. Тем не менее, использование того же скейлера, на котором установлено только 5000 образцов для изменения масштаба z
(9999000 образцов), кажется не совсем подходящим. Существуют ли лучшие практики в области глубокого обучения для решения этой проблемы?
Для классификаторов, не чувствительных к масштабированию объектов, у Линк-случайных лесов такой проблемы нет. Однако для глубокого изучения эта проблема существует.
Редактировать 1.
Данные обучения, показанные здесь, приведены только для примера. В реальной задаче данные обучения не приходят из одинакового (равномерного) распределения вероятностей. Сложно маркировать данные, и данные обучения имеют тенденцию к легкому маркированию. Только образцы легче маркировать.