Внесите глубокие характеристики в классификаторы машинного обучения (Случайный лес) - PullRequest
0 голосов
/ 30 января 2019

Я хочу передать свои глубокие особенности CNN традиционному классификатору, т.е. случайному лесу. Я не хочу использовать MLP (Multi-layer-perceptron) для классификации моей проблемы, но мне нужен другой классификатор, чтобы решить эту проблему для меня.У меня есть данные изображений.Мы не можем передавать неструктурированные данные в классификаторы машинного обучения.Я хочу сначала извлечь глубокие элементы из CNN (Conv2d, активация, слои Maxpooling), затем вывести данные изображения в структурированную форму и форму с пониженной выборкой, а затем передать их в обычный классификатор.В моем случае я хочу использовать случайный лес.Вот мой код ..

Я попробовал свой код, но эта модель выдает ошибку.Я хочу получить вывод после сплющенного слоя, поэтому я не добавил плотные слои, потому что хочу получить только глубокие объекты, а не классифицировать их.Я нашел решение моей проблемы в Google, но не получил никаких полезных ответов.

model_1=Sequential()

model_1.add(Conv2D(96,(3,3),padding="valid"))
model_1.add(Activation("relu"))
model_1.add(MaxPooling2D(pool_size=(2,2),strides=(2,2),padding="valid"))

model_1.add(Conv2D(180 ,(3,3),padding="valid"))
model_1.add(Activation("relu"))

model_1.add(MaxPooling2D(pool_size=(2,2),strides=(2,2),padding="valid"))

model_1.add(Conv2D(200 ,(3,3),padding="valid"))
model_1.add(Activation("relu"))
model_1.add(MaxPooling2D(pool_size=(3,3),strides=(2,2),padding="valid"))


model_1.add(Flatten())

model_1.compile(loss=keras.losses.binary_crossentropy, optimizer="adam", metrics=["accuracy"])
model_1.fit(X_128,y_categorical,epochs=100)
x=model_1.predict(X_128)

от model.fit изучит веса conv2d и model.predict. Я думаю, что у меня есть глубокие возможности.или нет, потому что я получаю ошибку.Ошибка:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-30-3c769c68fc69> in <module>()
     18 
     19 model_1.compile(loss=keras.losses.binary_crossentropy, optimizer="adam", metrics=["accuracy"])
---> 20 model_1.fit(X_128,y_categorical,epochs=100)
     21 x=model_1.predict(X_128)

/opt/conda/lib/python3.6/site-packages/Keras-2.2.4-py3.6.egg/keras/engine/training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, **kwargs)
    958             sample_weight=sample_weight,
    959             class_weight=class_weight,
--> 960             batch_size=batch_size)
    961         # Prepare validation data.
    962         do_validation = False

/opt/conda/lib/python3.6/site-packages/Keras-2.2.4-py3.6.egg/keras/engine/training.py in _standardize_user_data(self, x, y, sample_weight, class_weight, check_array_lengths, batch_size)
    787                 feed_output_shapes,
    788                 check_batch_axis=False,  # Don't enforce the batch size.
--> 789                 exception_prefix='target')
    790 
    791             # Generate sample-wise weight values given the `sample_weight` and

/opt/conda/lib/python3.6/site-packages/Keras-2.2.4-py3.6.egg/keras/engine/training_utils.py in standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix)
    137                             ': expected ' + names[i] + ' to have shape ' +
    138                             str(shape) + ' but got array with shape ' +
--> 139                             str(data_shape))
    140     return data
    141 

ValueError: Error when checking target: expected flatten_17 to have shape (33800,) but got array with shape (2,)

Спасибо за рассмотрение моей проблемы.Спасибо

1 Ответ

0 голосов
/ 30 января 2019

Ваша проблема не в модели, а в базовой концепции.Модель должна учиться генерировать хорошие функции.В настоящее время вы просто пропускаете их через Flatten.

Что вам действительно нужно сделать, так это добавить классификатор Random Forest в качестве последнего слоя вашей модели.В керасе это станет возможным благодаря созданию собственного пользовательского слоя .Таким образом, поток будет таким сплющенным, затем пропустите его через пользовательский слой Random Forest, чтобы предсказать, а затем рассчитать потери для обратного распространения через сеть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...