Как обучить CNN на немаркированном наборе данных? - PullRequest
0 голосов
/ 13 ноября 2018

Я хочу обучить CNN моим непомеченным данным, и из того, что я прочитал в документации Keras / Kaggle / TF или в темах Reddit, похоже, мне придется заранее пометить свой набор данных.Есть ли способ обучить CNN без присмотра?
Я не могу понять, как инициализировать y_train и y_test (где y_train и y_test представляют обычные значения)
Информация о моем наборе данных выглядит следующим образом:

  1. У меня 50 000 матриц размера 30 x 30.
  2. Каждая матрицаразделен на 9 подрайонов (для понимания, разделенных вертикальными и горизонтальными полосами).
  3. Подрайон называется активный , если в нем хотя бы один элемент равен 1. Если все элементы этого подрайона равны 0, то этот подрайон неактивны .
  4. Для первого примера, показанного ниже, я должен получить в качестве вывода имена активных подрайонов, поэтому здесь (1, 4, 5, 6, 7, 9).
  5. Еслиподрайон не активен, как во втором примере, выходной сигнал должен быть 0.

Первый пример: Выход - (1, 4, 5, 6, 7, 9) First example image

Второй пример: Вывод - 0 Second example image После создания этих матриц я сделал следующее:

  1. Я поместил эти матрицы в CSVфайл после преобразования их в векторы размером 900 x 1.
  2. Таким образом, в основном, каждая строка в CSV содержит 900 столбцов со значениями 0 или 1.
  3. Классы для моей задачи классификации - числаот 0 до 9, где 0 представляет класс, где ни одна метка не имеет активного (значение = 1) значения.

Для моей модели мне нужно следующее:

  • Ввод: вектор 900 x 1, как описано выше.
  • Выход: одно из значений 0-9,
    , где 1-9 представляют активные подрайоны, а 0 - отсутствие активных подрайонов.

Что ясделано:
Я могу получить данные из файла CSV в кадр данных и разделить кадр данных на x_train и x_test .Но я не могу понять, как установить мои значения y_train и y_test .
Моя проблема очень похожа на MNISTнабор данных, за исключением того, что у меня нет меток.Могу ли я обучить модель без надписей?

Мой код в настоящее время выглядит следующим образом:

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split

# Read the dataset from the CSV file into a dataframe
df = pd.read_csv("bci_dataset.csv")

# Split the dataframe into training and test dataset
train, test = train_test_split(df, test_size=0.2)

x_train = train.iloc[:, :]
x_test = test.iloc[:, :]

print(x_train.shape)
print(x_test.shape)

Заранее спасибо, что прочитали все это и помогли мне!

1 Ответ

0 голосов
/ 13 ноября 2018

Можете ли вы сказать нам, почему вы хотите использовать CNN специально? Обычно нейронные сети используются, когда существует некоторая сложность, связанная с переходом от функции к выходу - искусственные нейроны способны изучать различное поведение в результате воздействия на основную истину (то есть метки). Большую часть времени исследователь, использующий нейронную сеть, даже не знает, какие особенности входных данных используются сетью, чтобы прийти к своим выводным выводам.

В случае, если вы дали нам, это выглядит немного более похоже на то, что вы знаете, какие функции важны (то есть сумма подрайона должна быть больше 0, чтобы быть активной). Нейронной сети не нужно было бы действительно что-то изучать, чтобы выполнять свою работу. Хотя для этого процесса нет необходимости использовать нейронную сеть, для вас имеет смысл автоматизировать ее, учитывая размер ваших входных данных! :)

Дайте мне знать, если я неправильно понимаю вашу ситуацию?

Редактировать: чтобы сопоставить это с набором данных MNIST - поэтому для идентификации рукописных цифр существует некоторая двусмысленность, с которой должна научиться работать сеть. Не каждый вид почерка будет отображать 7 одинаково. Нейронная сеть способна определить пару особенностей 7 (т. Е. Существует высокая вероятность того, что 7 будет иметь диагональную линию, идущую сверху-справа-вниз-слева, что в зависимости от того, как вы write, может быть слегка изогнутым или смещенным или как угодно), а также несколько различных версий 7 (некоторые люди делают горизонтальную косую черту в середине, другие версии 7 не имеют такой косой черты). Полезность нейронной сети заключается в том, чтобы выяснить всю эту двусмысленность и вероятностно классифицировать вход как 7 (потому что он видел предыдущие изображения, которые он «знает», равны 7). Тем не менее, в вашем случае, есть только один способ для представления вашего ответа - если в подрайоне есть какой-либо элемент больше 0, он активен! Таким образом, вам не нужно обучать сеть, чтобы что-то делать - вам просто нужно написать некоторый код, который автоматизирует суммирование подрайонов.

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