Input_shape de Conv1D camada de Keras

0

Pergunta

Eu estou tentando fazer um CNN modelo para classificação binária de um não-conjunto de dados de imagem. O meu modelo/ código está funcionando e produzindo resultados muito bons (precisões são de alta), mas eu sou incapaz de compreender o input_shape parâmetro para a 1ª camada de Conv1D.

A forma de X ou de entrada (aqui x_train_df) é (2000, p. 28). Ele tem 28 características e 2000 amostras. E a forma de Y ou etiquetas (aqui y_train_df) é (2000, 1).

model = Sequential()
model.add(Conv1D(filters = 64, kernel_size = 3, activation = 'relu', input_shape = (x_train_df.shape[1], 1)))
model.add(Conv1D(filters = 64, kernel_size = 3, activation = 'relu'))
model.add(MaxPooling1D(pool_size = 2))
model.add(Flatten())
model.add(Dense(100, activation = 'relu'))
model.add(Dense(1, activation = 'sigmoid'))

optimzr = Adam(learning_rate=0.005)
model.compile(loss='binary_crossentropy', optimizer=optimzr,  metrics=[[tf.keras.metrics.AUC(curve="ROC", name = 'auc')], [tf.keras.metrics.AUC(curve="PR", name = 'pr')]])

# running the fitting
model.fit(x_train_df, y_train_df, epochs = 2, batch_size = 32, validation_data = (x_val_df, y_val_df), verbose = 2)

Eu dei input_shape como (28, 1), (tirado de referência a partir desta questão).

Mas em Conv1D camada de documentação está escrito que,

Quando utilizar esta camada como a primeira camada em um modelo de um input_shape argumento (tupla de números inteiros ou Nenhum, e.g. (10, 128) para sequências de 10 vetores de 128-dimensional vetores.

O que eu entendi é a dimensão de input_shape deve ser (2000, 1) como eu 2000 unidimensional vetores. Mas esta dando como input_shape mostra um erro como,

ValueError: Entrada 0 de camada "sequential_25" é incompatível com o camada: forma esperada=(None, 2000, 1), encontrado de forma=(None, 28)

Então a minha pergunta é qual deve ser o correto input_shape?

1

Melhor resposta

0

Vamos verificar como "Conv1D" leva de entrada.

>>> # The inputs are 128-length vectors with 10 timesteps, and the batch size
>>> # is 4.
>>> input_shape = (4, 10, 128)
>>> x = tf.random.normal(input_shape)
>>> y = tf.keras.layers.Conv1D(
... 32, 3, activation='relu',input_shape=input_shape[1:])(x)
>>> print(y.shape)
    (4, 8, 32)

3+D tensor com a forma: batch_shape + (passos, input_dim)

Como visto acima, há 128 funcionalidades, 10 timesteps e tamanho de lote de 4. Assim, Conv1D leva de entrada como (batch_size,timesteps,características). É preciso 3D de entrada. Digamos que você escolher o tamanho do lote, como 1 para o seu caso. Você tem que dar entrada, como (1,2000,28).

2021-11-22 08:00:37

Fazer a entrada (1,2000,28) cometeu um erro como ValueError: logits and labels must have the same shape, received ((None, 1) vs (None, 2000)). Então eu mudei as formas de ser (2000, 28, 1) para x_train_df e (2000, 1, 1) para y_train_df como mostrado no presente e que trabalhou. Estou confuso sobre isso. Vai ser muito útil se você poderia explicar como modificar o código em questão.
Badal

Em outros idiomas

Esta página está em outros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................