Estoy desarrollando una red neuronal convolucional para la clasificación de imágenes o mejor para la clasificación de matrículas. Estas placas contienen hasta 8 caracteres y para cada carácter son posibles 37 caracteres (AZ, 0-9 y un espacio en blanco). Ahora me pregunto cómo diseñar las dos últimas capas de mi red. Creo que el último tiene que ser una capa softmax con 37 probabilidades. Esto debería estar completamente conectado a una (?) Neurona en la capa anterior? Creo que en la capa anterior necesitamos 8 neuronas debido a los 8 caracteres de la matrícula anterior, pero no estoy seguro aquí. Antes de estas capas, agrego algunas capas convolucionales y maxPooling. ¿Es ese un enfoque válido o tiene otras sugerencias?
Escribí este código:
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"])
Especialmente con respecto a las capas después de mi Flatten Layer, no estoy muy seguro ... ¿Hay alguien que pueda ayudarme? Espero haber descrito mi problema correctamente ...
En sus capas anteriores, hay muchas arquitecturas de uso común que podría intentar para obtener una mejor precisión en su conjunto de datos.
En las capas densas, hay varias formas de abordarlo. Dado que, hay al menos 8 caracteres con 37 caracteres posibles cada uno. Podría tener la última capa como model.add(Dense(37*8, activation = "sigmoid"))
con el umbral en 0.5 para denotar todas las 37 * 8 posibilidades.
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"))
Una forma más adecuada podría ser tener 9 capas de salida: una con 8 neuronas para denotar la presencia de un personaje y otras 8 capas con 37 neuronas cada una con softmax para indicar qué personaje es. Tenga en cuenta que para hacer esto, debe utilizar la API funcional en lugar de la API secuencial.
Un ejemplo:
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])
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras