如何在未标记的数据集上训练 CNN?

How to train a CNN on an unlabeled dataset?

我想在我未标记的数据上训练 CNN,根据我在 Keras/Kaggle/TF 文档或 Reddit 线程上阅读的内容,看起来我必须事先标记我的数据集。有没有办法以无人监督的方式训练 CNN?
我无法理解如何初始化 y_trainy_test(其中y_train和y_test代表通常的意思)
我的数据集信息如下:

  1. 我有 50,000 个尺寸为 30 x 30 的矩阵。
  2. 每个矩阵分为9个子区域(便于理解,以竖线和横线分隔)。
  3. 如果一个子区域至少有一个元素等于 1,则称该子区域为 active。如果该子区域的所有元素都是等于0,分区为inactive
  4. 对于下面显示的第一个示例,我应该将活动子区域的名称作为输出,所以这里是 (1, 4, 5, 6, 7, 9)。
  5. 如果没有子区域处于活动状态,如第二个示例,则输出应为 0。

第一个例子:输出 - (1, 4, 5, 6, 7, 9)

第二个例子:输出 - 0 创建这些矩阵后,我执行了以下操作:

  1. 我将这些矩阵重塑为 900 x 1 维的向量后,将它们放入 CSV 文件中。
  2. 基本上,CSV 中的每一行都包含 900 列,其值要么是 0 要么是 1。
  3. 我的 classification 问题的 classes 是从 0-9 的数字,其中 0 代表 class,其中没有标签具有活动(值=1)值。

对于我的模型,我想要以下内容:

我做了什么:
我能够将 CSV 文件中的数据检索到数据框中,并将数据框拆分为 x_trainx_test。但是我无法理解如何设置我的 y_trainy_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)

预先感谢您阅读整篇文章并帮助我!

能具体说说为什么要用CNN吗?通常,当从特征到输出涉及一些复杂问题时,通常会使用神经网络——人工神经元能够由于暴露于基本事实(即标签)而学习不同的行为。大多数时候,使用神经网络的研究人员甚至不知道网络正在使用输入数据的哪些特征来得出其输出结论。

在你给我们的情况下,看起来更像是你知道哪些特征是重要的(也就是说,一个子区域的总和必须大于 0 才能激活)。神经网络不需要真正学习任何特别的东西来完成它的工作。尽管此过程似乎没有必要使用神经网络,但考虑到输入数据的大小,将其自动化对您来说确实有意义! :)

如果我误解了你的情况,请告诉我?

编辑:将其与 MNIST 数据集进行对比 - 因此为了识别手写数字,网络必须学会处理一些歧义。并非每种笔迹都会以相同的方式呈现 7。神经网络能够计算出 7 的几个特征(即 7 很可能有一条从右上角到左下角的对角线,这取决于你如何写,可以稍微弯曲或偏移或其他),以及几个不同版本的 7(有些人在它的中间做一个水平斜线,其他版本的 7 没有那个斜线)。此处神经网络的用途在于找出所有歧义并将输入概率分类为 7(因为它已经看到以前的图像 "knows" 是 7)。但是,在您的情况下,只有一种方法可以呈现您的答案 - 如果子区域中有任何大于 0 的元素,则它处于活动状态!所以你不需要训练网络做任何事情 - 你只需要编写一些代码来自动对子区域求和。