首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >卷积神经网络架构-正确吗?

卷积神经网络架构-正确吗?
EN

Stack Overflow用户
提问于 2020-04-30 18:15:40
回答 1查看 82关注 0票数 0

我正在尝试训练一个卷积神经网络。因此,我使用一个包含646张图像/车牌的数据集,其中包含8个字符(0-9,A-Z;没有字母'O‘和空格,总共36个可能的字符)。这些是我的训练数据X_train。它们的形状是颜色代码为3的(646, 40, 200, 3)。我将它们的大小调整为相同的形状。

我还有一个数据集,其中包含这些图像的标签,我将其热编码为一个形状为(646, 8, 36)的numpy数组。此数据是我的y_train数据。

现在,我正在尝试应用一个看起来像这样的神经网络:

该体系结构取自本文:https://ieeexplore.ieee.org/abstract/document/8078501

我排除了批处理规范化部分,因为这部分对我来说不是最有趣的部分。但我非常不确定这一层的顶部。这意味着在以model.add(Flatten())开头的最后一个池化层之后的部分...

代码语言:javascript
复制
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3), input_shape = (40, 200, 3), activation = "relu"))
model.add(Conv2D(32, kernel_size=(3, 3), activation = "relu"))
model.add(Conv2D(32, kernel_size=(3, 3), activation = "relu"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, kernel_size=(3, 3), activation = "relu"))
model.add(Conv2D(64, kernel_size=(3, 3), activation = "relu"))
model.add(Conv2D(64, kernel_size=(3, 3), activation = "relu"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(128, kernel_size=(3, 3), activation = "relu"))
model.add(Conv2D(128, kernel_size=(3, 3), activation = "relu"))
model.add(Conv2D(128, kernel_size=(3, 3), activation = "relu"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(16000, activation = "relu"))
model.add(Dense(128, activation = "relu"))
model.add(Dense(36, activation = "relu"))
model.add(Dense(8*36, activation="Softmax"))
model.add(keras.layers.Reshape((8, 36)))

非常感谢您的提前!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-06 23:06:55

假设下面的图像与您的模型架构相匹配,则可以使用代码来创建模型。确保您对输入图像有一些填充。

代码语言:javascript
复制
import tensorflow as tf
from tensorflow.keras.models import Sequential, Model
from tensorflow.keras.layers import Conv2D, Flatten, MaxPooling2D, Dense, Input, Reshape, Concatenate

def create_model(input_shape = (40, 200, 3)):
    input_img = Input(shape=input_shape)
    model = Conv2D(32, kernel_size=(3, 3), input_shape = (40, 200, 3), activation = "relu")(input_img)
    model = Conv2D(32, kernel_size=(3, 3), padding="same", activation = "relu")(model)
    model = Conv2D(32, kernel_size=(3, 3), padding="same", activation = "relu")(model)
    model = MaxPooling2D(pool_size=(2, 2))(model)
    model = Conv2D(64, kernel_size=(3, 3), padding="same", activation = "relu")(model)
    model = Conv2D(64, kernel_size=(3, 3), padding="same", activation = "relu")(model)
    model = Conv2D(64, kernel_size=(3, 3), padding="same", activation = "relu")(model)
    model = MaxPooling2D(pool_size=(2, 2))(model)
    model = Conv2D(128, kernel_size=(3, 3), padding="same", activation = "relu")(model)
    model = Conv2D(128, kernel_size=(3, 3), padding="same", activation = "relu")(model)
    model = Conv2D(128, kernel_size=(3, 3), padding="same", activation = "relu")(model)
    model = MaxPooling2D(pool_size=(2, 2))(model)
    backbone = Flatten()(model)

    branches = []
    for i in range(8):
        branches.append(backbone)
        branches[i] = Dense(16000, activation = "relu", name="branch_"+str(i)+"_Dense_16000")(branches[i])
        branches[i] = Dense(128, activation = "relu", name="branch_"+str(i)+"_Dense_128")(branches[i])
        branches[i] = Dense(36, activation = "softmax", name="branch_"+str(i)+"_output")(branches[i])
    
    output = Concatenate(axis=1)(branches)
    output = Reshape((8, 36))(output)
    model = Model(input_img, output)

    return model
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61521042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档