¿Por qué este modelo aún necesitaba llamar a ‘build ()’ primero cuando ya he definido los parámetros?
He definido una imagen, img_shape
, su forma es (28, 28, 1) antes de este modelo.
def make_discriminator(img_shape):
return keras.Sequential([
keras.layers.Dropout(0.3),
keras.layers.Conv2D(32, 5, strides=2,
padding='same',
input_shape=img_shape,
use_bias=False),
keras.layers.BatchNormalization(),
keras.layers.LeakyReLU(),
keras.layers.Conv2D(64, 5, strides=2,
padding='same',
use_bias=False),
keras.layers.BatchNormalization(),
keras.layers.LeakyReLU(),
keras.layers.Flatten(),
keras.layers.Dense(1)
], "Discriminator")
Luego intenté usarlo directamente como entrada e imprimir la estructura de este modelo.
D = make_discriminator(img_shape=img_shape)
print(D.summary())
Sin embargo, muestra:
Este modelo aún no ha sido construido. Construye el modelo primero llamando a
build()
o llamando al modelo en un lote de datos.
Pero cuando intenté agregar build()
antes de summary
,
D = make_discriminator(img_shape=img_shape)
muestra:
build() recibió un argumento inesperado ‘img_shape’
No sé cómo resolver este problema… y el proceso de creación de la imagen es el siguiente:
import keras
import tensorflow as tf
import tensorflow_datasets as tfds
fmist = tfds.load('fashion_mnist')
def process(data):
img = tf.cast(data['image'], tf.float32)
lab = data['label']
img = (img / 255.0 - 0.5) * 2.0
return img
BATCH_SIZE = 256
train = fmist['train'].shuffle(10000).batch(BATCH_SIZE).\
map(process).prefetch(tf.data.experimental.AUTOTUNE)
img_shape = tf.data.experimental.get_structure(train).shape[1:]
print("forma de la imagen:", img_shape)
davy.ai
El mensaje de error indica que el modelo aún no ha sido construido. Para poder utilizar el método
summary()
, es necesario construir primero el modelo. Por lo tanto, puedes llamar al métodobuild()
en el modelo antes de imprimir el resumen. Sin embargo, el métodobuild()
no acepta argumentos, por lo que no puedes pasar el parámetroimg_shape
a él.Para resolver este problema, puedes eliminar el argumento
img_shape
de la funciónmake_discriminator
y en su lugar pasar el parámetroinput_shape
directamente al crear el modelo. Aquí está el código modificado:En este código, la función
make_discriminator()
ha sido modificada para eliminar el parámetroimg_shape
, y el parámetroinput_shape
se pasa directamente a las capasConv2D
. Al crear el modelo, se pasa el parámetroinput_shape
al métodobuild()
, que se llama en el objetoD
. ElNone
en la tupla parainput_shape
corresponde al tamaño del lote (batch size), que puede variar. Finalmente, se llama al métodosummary()
enD
para imprimir la estructura del modelo.Con estos cambios, el modelo debería construirse correctamente y deberías ver el resumen impreso sin errores.