首页 文章

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

提问于
浏览
0

我想在我的无标签数据上训练CNN,从我在Keras / Kaggle / TF文档或Reddit线程上看到的内容,看起来我必须预先标记我的数据集 . 有没有办法以无人监督的方式训练CNN?
我无法理解如何初始化y_train和y_test(其中y_train和y_test表示通常的含义)
有关我的数据集的信息如下:

  • 我有50,000个尺寸为30 x 30的矩阵 .

  • 每个矩阵分为9个子区域(用于理解,由垂直和水平条分隔) .

  • 如果子区域至少有一个元素等于1,则称子区域处于活动状态 . 如果该子区域的所有元素都等于0,则子区域处于非活动状态 .

  • 对于下面显示的第一个例子,我应该得到活动子区域的名称,所以这里,(1,4,5,6,7,9) .

  • 如果没有子区域处于活动状态,如第二个示例中所示,则输出应为0 .

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

第二个例子:输出 - 0
Second example image
创建这些矩阵后,我做了以下事情:

  • 我将这些矩阵重新编码为尺寸为900 x 1的向量后,将其放在CSV文件中 .

  • 基本上,CSV中的每一行都包含900列,值为0或1 .

  • 我的分类问题的类是0-9中的数字,其中0表示没有标签具有活动(值= 1)值的类 .

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

  • Input: 如上所述的900×1矢量 .

  • Output: 0-9之一的值之一,
    其中1-9表示活动子区域,0表示无活动子区域 .

What I have done:
我能够将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

    你能告诉我们你为什么要特意使用CNN吗?通常,当从特征到输出涉及一些复杂化时使用神经网络 - 人工神经元能够通过暴露于基础事实(即标签)而学习不同的行为 . 大多数情况下,使用神经网络的研究人员甚至不知道网络正在使用输入数据的哪些特征来得出其输出结论 .

    在你给我们的情况下,它看起来更像你知道哪些特征是重要的(也就是说,为了活跃,子区域的总和必须大于0) . 神经网络不需要真正学习任何特别的东西来完成它的工作 . 虽然似乎没有必要在这个过程中使用神经网络,但考虑到输入数据的大小,你自动化它是有意义的! :)

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

    编辑:将此与MNIST数据集进行对比 - 因此,为了识别手写数字,网络必须学会处理一些模糊性 . 并非每种手写都会以同样的方式呈现7 . 一个神经网络能够找出7的一些特征(即7很可能会有一条从右上角到左下角的对角线,这取决于你如何写,可能是略微弯曲或偏移或其他),以及7的一些不同版本(有些人在它的中间做一个横向斜线,其他版本的7没有斜线) . 这里神经网络的效用在于弄清楚所有的模糊性并且将输入概率地分类为7(因为它已经看到它“知道”的先前图像是7s) . 但是,在您的情况下,只有一种方法可以呈现您的答案 - 如果子区域中有任何大于0的元素,则它是活动的!因此,您不需要训练网络来执行任何操作 - 您只需要编写一些代码来自动完成子区域的求和 .

相关问题