classificação binária de imagens em Keras

votos
1

Eu estou tentando classificar imagens (29 x 29) usando apenas um canal em Keras. Se o pixel do meio é em um determinado intervalo, então a saída é 1, se não, então é 0.

Para o conjunto de treinamento que tenho 10000 imagens com saída 1 e 30000 imagens com saída 0 e eu estou usando o seguinte arquitetura:

model = Sequential()

# kernel = (4, 4); 6 outputmaps  26x26 
model.add(Convolution2D(6, 4, 4, input_shape=(img_channels, img_rows, img_columns)))
model.add(Activation('relu'))
# 6 outputmaps of 13x13
model.add(MaxPooling2D(pool_size=(2, 2)))
# 12 outputmaps of 10x10 ; kernel = (4, 4)
model.add(Convolution2D(12, 4, 4))
model.add(Activation('relu'))
# 12 outputmaps of 5x5
model.add(MaxPooling2D(pool_size=(2, 2)))
# 24 outputmaps of 4x4 ; kernel = (2, 2)
model.add(Convolution2D(24, 2, 2))
model.add(Activation('relu'))
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))

Para a compilação, eu estou usando a perda binary_crossentropy

model.compile(loss='binary_crossentropy', optimizer='sgd', class_mode='binary')

A precisão varia, mas atinge um valor final de 0,75 após cada época. Existe algo que eu estou ausente? Existe alguma coisa que eu deveria mudar ou adicionar em ordem para que isso funcione?

Publicado 18/03/2016 em 13:06
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

Tentando interpretar sua abordagem, você quer que seu CNN olhar apenas para 1 de 29 * 29 pixels. Eu não sou um especialista, mas isso não soa como um bom problema para a CNN. No entanto, geralmente se a rede alcança resultados ruins nos dados de treinamento, sua rede é muito pequena. Então você pode tentar torná-lo maior. Outra coisa que você pode pensar: O que suas configurações (tamanho do kernel, camadas, pooling) realmente atingir? Poderia suas configurações de ser ruim para este tipo de tarefa? Aqui está o que eu faria:

  • tente isso sem CNN, ou seja, usar 1 ou 2 camada totalmente conectado e ver o que acontece
  • fazer a resolução 'mais fino', ou seja, o uso (3,3) tamanho do filtro
  • remover maxpooling (maxpooling joga fora informação para fazer características mais invariável, não vejo que você precisa isto)
  • adicionar mais camadas conv
  • pode não ser relevante, mas o conjunto de dados é muito pequeno para que você não precisa do benefício da velocidade de SGD, ir para um outro otimizador vez

Como exatamente o seu treinamento e testes parece? É este um projeto de brinquedo?

Respondeu 20/03/2016 em 11:40
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more