Запросить предложение по улучшению моей модели обучения CNN? - PullRequest
1 голос
/ 26 января 2020

Я пытаюсь построить модель классификации для производственной линии. Если я правильно понимаю, можно использовать CNN для классификации числовых данных (и не только изображений)

Мои данные - это массив из 21 столбца в строке: 20 различных измерений, а последний столбец - это тип. Это может быть 0 или 1 или 2, каждая строка массива использует временную метку, так как индекс

тип 0 представляет 80% производства и не требует дополнительной обработки, но тип 1 и 2 требуют дополнительной обработки после производства ( , поэтому мне нужно четко идентифицировать их )

Чтобы воссоздать что-то, что может использовать CNN, я создал набор данных, где каждая метка имеет для обучающих данных массив из последних 20 предыдущих строк, так как position.
Таким образом, каждая метка имеет для соответствующих обучающих данных квадратный массив измерений 20x20 (например, изображение). (данные уже были нормализованы с использованием keras ColumnTransformer

после прочтения о несбалансированном наборе данных, я решил включать только тип 0 каждый раз, когда обнаружил тип 1 или 2. В конце мой размер набора данных составляет 18 000 строк, data shape '(18206, 20, 20)'

моя модель обучения довольно проста c и выглядит следующим образом:

        train, test, train_label, test_label = train_test_split(X,y,test_size=0.3,shuffle=True)
        ##Call CNN model
        sizePic = 20
        model = Sequential()
        model.add(Dense(sizePic*3, input_shape=(sizePic,sizePic,), activation='relu'))
        model.add(Dense(sizePic, activation='relu'))
        model.add(Flatten())
        model.add(Dense(3, activation='softmax'))
        # Compile model
        sgd = optimizers.SGD(lr=0.03)
        model.compile(loss='sparse_categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])
        self.logger.info(model.summary())

        # Fit the model
        model.fit(train, train_label, epochs=750, batch_size=200,verbose=1)
        # evaluate the model
        self.learning_scores = model.evaluate(test, test_label, verbose=2)
        self.logger.info("scores %r"%self.learning_scores)

в конце прогноза оценки:

оценки [0.6088506683505354, 0,7341632843017578]

Я изменил параметры, такие как batch_size и скорость обучения, но без особых улучшений. Насколько я понимаю, лучше начать этот путь, чем добавлять Слои модели, это правильно? Любое предложение? Спасибо за ваше время

1 Ответ

1 голос
/ 26 января 2020

Вы не используете какой-либо конвон-слой, только полностью соединенные слои (и не бойтесь добавлять некоторые конвекционные слои, поскольку у них гораздо меньше параметров, чем у плотных слоев)

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