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

多输出卷积神经网络

何兴安
2023-03-14

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

我编写了以下代码:

from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D

model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3), input_shape = (600, 1200, 1), activation = "relu"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(64, activation = "relu"))
model.add(Dense(8, activation = "relu"))
model.add(Dense(37, activation = "softmax"))

model.compile(optimizer="rmsprop", loss="categorical_crossentropy", metrics=["accuracy"])

尤其是关于我的平坦层之后的层,我真的不确定......有人能帮忙吗?我希望我正确地描述了我的问题......

共有1个答案

金瑞
2023-03-14

在之前的层中,有许多常用的体系结构,您可以尝试在数据集上获得更好的准确性。

在致密层上,有多种方法可以解决它。因为,atmost有8个字符,每个字符可能有37个字符。您可以将最后一层作为模型。添加(密集(37*8,activation=“sigmoid”),阈值为0.5,表示所有37*8的可能性。

 model = Sequential()
 model.add(Conv2D(32, kernel_size=(3, 3), input_shape = (600, 1200, 1), activation = "relu"))
 model.add(MaxPooling2D(pool_size=(2, 2)))
 model.add(Dropout(0.25))
 model.add(Flatten())
 model.add(Dense(64, activation = "relu"))
 model.add(Dense(37*8, activation = "relu"))

一种更合适的方法是有9个输出层:一个有8个神经元来表示角色的存在,另8个有37个神经元的层,每个神经元有softmax来表示角色是什么。请注意,要做到这一点,您必须使用函数API而不是顺序API。

例如:

 inp = Input(shape=(600,1200,1))
 X = Conv2D(32, kernel_size=(3, 3), activation = "relu")(inp)
 X = MaxPooling2D(pool_size=(2, 2))(X)
 X = Dropout(0.25)(X)
 X = Flatten()(X)
 X = Dense(64, activation = "relu")(X)
 P = Dense(8, activation = "relu")(X)
 C1 = Dense(37, activation = "softmax")(X)
 ...
 C8 = Dense(37, activation = "softmax")(X)
 model = Model(inp, [P,C1,C2,...C8])
 类似资料:
  • 注意: 本教程适用于对Tensorflow有丰富经验的用户,并假定用户有机器学习相关领域的专业知识和经验。 概述 对CIFAR-10 数据集的分类是机器学习中一个公开的基准测试问题,其任务是对一组大小为32x32的RGB图像进行分类,这些图像涵盖了10个类别: 飞机, 汽车, 鸟, 猫, 鹿, 狗, 青蛙, 马, 船以及卡车。 想了解更多信息请参考CIFAR-10 page,以及Alex Kriz

  • 卷积神经网络(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。卷积神经网络由一个或多个卷积层和顶端的全连通层(对应经典的神经网络)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网络能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网络

  • 我正在研究一个深度学习问题,它需要我有一个深度学习模型,该模型具有输入图像和输出另一张图像。现在,输入和输出图像具有不同的维度,因此我不能使用自动编码器。我已经尝试构建一个非常简单的卷积神经网络,它有一个最终的输出密集层,该层以输出图像的宽度和高度相乘为“单位”参数。然而,我下面附加的这个网络没有成功。我的问题是: CNN是不是像我这样处理这个问题的合适的深度学习网络 如果没有,我还可以尝试其他什

  • 然而,我不明白如何扩展这个模型来处理多个通道。每个特征图是否需要三个独立的权重集,并在每种颜色之间共享? 参考本教程的“共享权重”部分:http://deeplearning.net/tutorial/lenet.html特征图中的每个神经元都引用层m-1,颜色是从单独的神经元引用的。我不明白他们在这里表达的关系。神经元是核还是像素?为什么它们引用图像的不同部分? 根据我的例子,一个神经元内核似乎

  • 我对卷积神经网络中的多通道场景感到困惑。 有人能帮帮我。

  • 下午好在第一阶段,在卷积神经网络(输入层)的输入上,我们接收一个源图像(因此是手写英文字母的图像)。首先,我们使用一个从左到右的nxn窗口来扫描图像并在内核(卷积矩阵)上乘法来构建特征映射?但没有人写过内核应该具有什么样的精确值(换句话说,我应该将从n*n窗口检索到的数据相乘到什么样的内核值)。是否适合在这个用于边缘检测的卷积核上乘以数据?有许多卷积核(浮雕、高斯滤波器、边缘检测、角度检测等)?但