当前位置: 首页 > 知识库问答 >
问题:

keras中卷积神经网络的输出形状误差

淳于烈
2023-03-14

我一直在研究一个简单的卷积神经网络模型,但输出似乎与我想要的形状不匹配。


from keras.layers import Input, Conv2D, MaxPooling2D, Reshape, Flatten, Dense, Dropout, Activation
from keras.models import Sequential
from keras.layers.convolutional import *
from keras.layers.pooling import *
from keras.optimizers import Adam
from keras.optimizers import rmsprop
from keras.metrics import categorical_crossentropy

model_CL = Sequential([
    Dense(64, activation = 'relu', input_shape = (200, 4, 1)),
    Conv2D(64, kernel_size = (3, 3), activation = 'relu', padding = 'same'),
    MaxPooling2D(pool_size = (2, 2), strides = 2, padding = 'valid'),
    Dropout(rate=0.3),
    Conv2D(64, kernel_size = (5, 5), activation = 'relu', padding = 'same'),
    Flatten(),
    Dense(2, activation = 'softmax')
])




model_CL.compile(loss = 'sparse_categorical_crossentropy', metrics = ['accuracy'], optimizer = 'Adam')
model_CL.summary()


from keras.callbacks import EarlyStopping
from keras.callbacks import ModelCheckpoint

es_CL = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=5)
mc_CL = ModelCheckpoint('best_model_CL.h5', monitor='val_acc', mode='max', verbose=1, save_best_only=True)

epochs = 50
hist_CL = model_CL.fit(CL_train_input, CL_train_label, validation_data=(CL_validation_input, CL_validation_label), batch_size=32, epochs=epochs, verbose=0, callbacks=[es_CL, mc_CL])

所以我的输入大小似乎不是问题。我的训练集输入形状是(13630, 200, 4, 1)其中13630是数据的数量,而我的training_label如下。(13630,2)我期望模型输出形状是(2,),但它似乎期望(1,)作为输出大小。

所以我的错误是这样的。

检查目标时出错:预期稠密_28具有形状(1),但获得具有形状(2)的数组

只是作为参考,

型号:“顺序_14”

dense_27(密集)(无,200, 4, 64) 128

conv2d_27(conv2d)(无、200、4、64)36928

最大池2D池14(最大池(无、100、2、64)0

dropout_14(辍学)(无,100, 2, 64) 0

conv2d_28(Conv2D)(无,100, 2, 64) 102464

flatten_13(压平)(无,12800)0

总参数:165122可培训参数:165122不可培训参数:0

这是我的模型的摘要。我不太清楚它为什么期待(1,)。

共有2个答案

平和雅
2023-03-14

听起来你的training\u标签是一个热编码标签。因此,您希望使用categorical\u crossentropy而不是sparse\u categorical\u crossentropy,它需要形状(无,1)

伏欣悦
2023-03-14

这里的问题是,您将2作为输出,而在输入层中仅输入1。这是你能做的,

  • 在输出层中,这个Dense(2,activation='softmax')您可以将第一个参数更改为1,这意味着您将为二进制问题获取一个输出。像这样的Dense(1,activation='softmax')
 类似资料:
  • 我有32760个音频频谱,计算维度=72(#帧)x 40(#频段),我试图将其输入“宽”卷积神经网络(第一层是4个不同conv层的合奏)。这些频谱没有深度,因此它们可以表示为72 x 40 2D数字浮点数组,因此分类器的X输入是一个32760个元素长的数组,每个元素都是这些72 x 40 x 1频谱之一。Y输入是一个标签数组,一个热编码,有32760个元素。 当尝试使用 我得到以下错误: 以下是我

  • 我正在尝试创建一个CNN来对数据进行分类。我的数据是X[N\u数据,N\u特征]我想创建一个能够对其进行分类的神经网络。我的问题是关于keras后端Conv1D的输入形状。 我想在上面重复一个过滤器。。假设有10个特征,然后为接下来的10个特征保持相同的权重。对于每个数据,我的卷积层将创建N\U特征/10个新神经元。我该怎么做?我应该在input\u形状中放置什么? 有什么建议吗?非常感谢。

  • 我在使用Keras和Python对3D形状进行分类时遇到了一个问题。我有一个文件夹,里面有一些JSON格式的模型。我将这些模型读入Numpy数组。模型是25*25*25,表示体素化模型的占用网格(每个位置表示位置(i、j、k)中的体素是否有点),因此我只有1个输入通道,就像2D图像中的灰度图像一样。我拥有的代码如下: 在此之后,我得到以下错误 使用TensorFlow后端。回溯(最后一次调用):文

  • 我正在开发一种卷积神经网络用于图像分类或更好的车牌分类。这些车牌最多包含8个字符,每个字符可以包含37个字符(A-Z、0-9和空格)。我现在想知道如何设计网络中的最后两层。我认为,最后一个必须是具有37个概率的softmax层。这应该完全连接到一个(?)神经元在前一层?我想,在前一层我们需要8个神经元,因为之前的车牌上有8个字符,但我不确定。在此层之前,我添加了一些卷积层和maxPooling层。

  • 我正在尝试为数字数据集构建1D CNN。我的数据集有520行和13个特征。下面是代码。 它给出了“ValueError:layer sequential\u 21的输入0与layer不兼容::expected min\u ndim=3,found ndim=2。接收到的完整形状:(1,13)”错误。 我需要如何设置输入形状,还是必须重塑X\U列?非常感谢您的帮助。

  • 注意: 本教程适用于对Tensorflow有丰富经验的用户,并假定用户有机器学习相关领域的专业知识和经验。 概述 对CIFAR-10 数据集的分类是机器学习中一个公开的基准测试问题,其任务是对一组大小为32x32的RGB图像进行分类,这些图像涵盖了10个类别: 飞机, 汽车, 鸟, 猫, 鹿, 狗, 青蛙, 马, 船以及卡车。 想了解更多信息请参考CIFAR-10 page,以及Alex Kriz