- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想训练一个模型来根据物理信号预测一个人的情绪。我有三个物理信号并将其用作输入功能;
ecg(Electrocardiography), gsr(galvanic skin response), temp(temparature)
在我的数据集中,每个参与者有 312 条记录,每条记录中有 18000 行数据。因此,当我将它们合并到一个数据框中时,总共有 5616000 行。
这是我的x_train
数据框;
ecg gsr temp
0 0.1912 0.0000 40.10
1 0.3597 0.0000 40.26
2 0.3597 0.0000 40.20
3 0.3597 0.0000 40.20
4 0.3597 0.0000 40.33
5 0.3597 0.0000 40.03
6 0.2739 0.0039 40.13
7 0.1641 0.0031 40.20
8 0.0776 0.0025 40.20
9 0.0005 0.0020 40.26
10 -0.0375 0.0016 40.03
11 -0.0676 0.0013 40.16
12 -0.1071 0.0010 40.20
13 -0.1197 0.0047 40.20
.. ....... ...... .....
.. ....... ...... .....
.. ....... ...... .....
5616000 0.0226 0.1803 38.43
我有 6 个与情绪相对应的类。我已经用数字对这些标签进行了编码;
anger = 0, calmness = 1, disgust = 2, fear = 3, happiness = 4, sadness = 5
这是我的 y_train;
emotion
0 0
1 0
2 0
3 0
4 0
. .
. .
. .
18001 1
18002 1
18003 1
. .
. .
. .
360001 2
360002 2
360003 2
. .
. .
. .
. .
5616000 5
为了提供我的 CNN 模型,我需要 reshape 我的训练示例。我就是这样做的;
train_x = train_x.values.reshape(5616000,3,1) #because I have 5616000 rows and 3 input features
train_y = train_y.values.reshape(5616000,1)
reshape 后,我创建了我的 CNN 模型;
model = Sequential()
model.add(Conv1D(100,700,activation='relu',input_shape=(5616000,3)))
model.add(Conv1D(100,700,activation='relu'))
model.add(MaxPooling1D(4))
model.add(Conv1D(160,700,activation='relu'))
model.add(Conv1D(160,700,activation='relu'))
model.add(GlobalAveragePooling1D())
model.add(Dropout(0.5))
model.add(Dense(1,activation='softmax'))
model.compile(optimizer = sgd, loss = 'binary_crossentropy', metrics = ['acc'])
model.fit(train_x,train_y,epochs = 300, batch_size = 32, validation_split=0.33, shuffle=False)
这给了我以下错误;
ValueError: Error when checking input: expected conv1d_96_input to have shape (5616000, 3) but got array with shape (3, 1)
无论我尝试过什么,都无法使其发挥作用。感谢任何帮助,谢谢。
最佳答案
问题出在 model.add(Conv1D(100,700,activation='relu',input_shape=(5616000,3)))
。因为这里 input_shape
将为 (3,1)
,所以您有 3 个输入特征。像这样使用,
model.add(Conv1D(100,700,activation='relu',input_shape=(3,1)))
您有 5616000
个样本,可用于对您选择的 batch_size = 32
进行 model.fit
操作。因此,在每次迭代中,它将从 5616000 个样本中取出 32 个样本进行训练。
更新1
对于您的用例,您可以使用 Dense
,而不是使用 Conv1D
,因为您只有 3 个功能。我建议这样做,
train_x = train_x.values.reshape(5616000,3)
对于您的 train_y
,您需要预测 6 个类别,因此您需要执行 one hot encoding 。所以,对于你来说train_y
将会是,
train_y = keras.utils.to_categorical(train_y.values.reshape(5616000,1), num_classes=6)
然后你的模型会是这样的,
model = Sequential()
model.add(InputLayer(input_shape=(3,)))
model.add(Dense(8,activation='relu'))
model.add(Dense(10,activation='relu'))
model.add(Dense(8,activation='relu'))
model.add(Dense(6,activation='softmax'))
您的用例是多类分类,请查找here多类分类和二元分类之间的区别。现在模型编译将是,
model.compile(optimizer = sgd, loss = 'categorical_crossentropy', metrics = ['acc'])
并且合身度是相同的,
model.fit(train_x,train_y,epochs = 300, batch_size = 32, validation_split=0.33, shuffle=False)
更新2
如果您认为密集层不够,您也可以尝试这个。因为您必须在密集层中添加更多神经元或添加更多隐藏层,这样您将获得更多数量的可训练层参数,这可能会有所帮助。您只有三个功能,因此,在 Conv1D
中,内核大小必须根据而不是这样选择,model.add(Conv1D(100,700,activation='relu',input_shape=(3,1)))
。我认为它也应该有效。
model=Sequential()
model.add(InputLayer(input_shape=(3,1)))
model.add(Conv1D(100, 2, activation='relu'))
model.add(Conv1D(100, 2, activation='relu'))
model.add(Conv1D(128, 1, activation='relu'))
model.add(Conv1D(128, 1, activation='relu'))
model.add(Dropout(0.5))
model.add(Flatten())
model.add(Dense(6, activation='softmax'))
model.summary()
Layer (type) Output Shape Param #
=================================================================
conv1d_1 (Conv1D) (None, 2, 100) 300
_________________________________________________________________
conv1d_2 (Conv1D) (None, 1, 100) 20100
_________________________________________________________________
conv1d_3 (Conv1D) (None, 1, 128) 12928
_________________________________________________________________
conv1d_4 (Conv1D) (None, 1, 128) 16512
_________________________________________________________________
dropout_1 (Dropout) (None, 1, 128) 0
_________________________________________________________________
flatten_1 (Flatten) (None, 128) 0
_________________________________________________________________
dense_1 (Dense) (None, 6) 774
=================================================================
Total params: 50,614
Trainable params: 50,614
Non-trainable params: 0
_________________________________________________________________
关于python - CNN 的输入形状不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55632228/
R-CNN、fast R-CNN、faster R-CNN 和 YOLO 在以下方面有什么区别: (1) 同一图像集上的精度 (2) 给定 SAME IMAGE SIZE,运行时间 (3) 支持安卓移
我试图比较 CNN 模型和组合 CNN-SVM 模型进行分类的准确性结果。然而我发现 CNN 模型比 CNN-SVM 组合模型具有更好的准确性。这是正确的还是可能发生? 最佳答案 这取决于很多因素,但
我知道这可能是一个愚蠢的问题,但我对机器学习和人工神经网络有点陌生。 深度卷积神经网络和密集卷积神经网络有什么区别吗? 提前致谢! 最佳答案 密集 CNN 是深度 CNN 的一种,其中每一层都与比自身
我正在使用预训练的 CNN 从图片中提取特征。使用这些特征作为新 CNN/NN 的输入有意义吗?以前做过吗?我很高兴得到答复。 最佳答案 这称为微调。这是非常常用的。通常,我们会删除 VGG 或类似网
与 caffe 合作几个月后,我已经能够成功地训练我自己的模型。例如,比我自己的模型更进一步,我已经能够用 1000 个类来训练 ImageNet。 现在在我的项目中,我试图提取我感兴趣的区域。之后我
我正在使用下面的 LeNet 架构来训练我的图像分类模型,我注意到每次迭代都不会提高训练和验证的准确性。这方面的任何专家都可以解释可能出了什么问题吗? 训练样本 - 属于 2 个类别的 110 张图像
我使用剩余连接实现了以下 CNN,用于在 CIFAR10 上对 10 个类进行分类: class ConvolutionalNetwork(nn.Module): def __init__(se
我有一组二维输入数组 m x n即 A,B,C我必须预测两个二维输出数组,即 d,e我确实有预期值。如果您愿意,您可以将输入/输出视为灰色图像。 由于空间信息是相关的(这些实际上是 2D 物理域)我想
我正在开发一个交通跟踪系统,该系统可以分析已经收集的视频。我正在使用opencv,线程,pytorch和dectron2。为了加快从opencv抓帧的速度,我决定使用Thread,该线程运行一个循环,
我正在解决一个问题,需要我构建一个深度学习模型,该模型必须基于某些输入图像输出另一个图像。值得注意的是,这两个图像在概念上是相关的,但它们没有相同的尺寸。 起初我认为具有最终密集层(其参数是输出图像的
我正在制作一个卷积网络来预测 3 类图像:猫、狗和人。我训练了又训练它,但是当我传递猫图像来预测时,它总是给出错误的输出。我尝试了其他猫的照片,但结果没有改变。对于人和狗来说没有问题,只是对于猫来说。
我接到一项任务,要实现一个卷积神经网络,该网络可以评估 MNIST dataset 中找到的手写数字。网络架构如下所示: 我已经实现了一个与架构相匹配的 CNN,不幸的是它的准确率只有 10% 左右。
我正在尝试在 Keras 中重新创建 CNN 来对点云数据进行分类。 CNN 在 this 中描述。纸。 网络设计 这是我当前的实现: inputs = Input(shape=(None, 3))
我想为有 300 个类的数据集设计 CNN。我已经用以下模型对两个类(class)进行了测试。它具有良好的准确性。 model = Sequential([ Conv2D(16, 3, padding
我成功训练了 CNN 模型,但是当我向模型提供图像以使其预测标签时,出现错误。 这是我的模型(我正在使用 saver.restore 恢复它)... # load dataset mnist = in
我恢复了用于人脸检测的预训练模型,该模型一次获取单个图像并返回边界框。如果这些图像具有不同的尺寸,如何才能获取一批图像? 最佳答案 您可以使用tf.image.resize_images方法来实现这一
我有大约 8200 张图像用于人脸检测任务。其中 4800 个包含人脸。其他 3400 张图像包含 3D 人脸面具(由橡胶/ latex 制成)、卡通人脸、猴子脸的图像。我想检测给定的图像是否包含真实
我有一组合成噪声图像。示例如下: 我还有它们相应的干净文本图像作为我的地面实况数据。下面的例子: 两个图像的尺寸为4918 x 5856。它的大小是否适合训练我的执行图像去噪的卷积神经网络?如果没有,
大家好! 由于我正在尝试制作一个将灰度图像转换为 RGB 图像的全卷积神经网络,所以我想知道是否可以在不同大小的图像(不同的像素和比率)上训练和测试模型。通常你只会下采样或上采样,这是我不想做的。我听
我正在研究 CNN 特征的早期和晚期融合。我从 CNN 的多层中获取了特征。对于早期融合,我捕获了三个不同层的特征,然后水平连接它们 F= [F1' F2' F3']; 对于后期融合,我正在阅读此 p
我是一名优秀的程序员,十分优秀!