#python #tensorflow #keras #tensorflow2.0
#питон #тензорный поток #keras #тензорный поток 2,0
Вопрос:
Я определил изображение img_shape
, его форма (28,28,1) перед этой моделью,
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")
Затем я попытался напрямую использовать его в качестве входных данных и распечатать структуру этой модели,
D = make_discriminator(img_shape = img_shape) print(D.summary())
Тем не менее, это показывает
Эта модель еще не построена. Сначала создайте модель, вызвав
build()
или вызвав модель для пакета данных.
Но когда я попытался добавить build() перед сводкой,
D = make_discriminator(img_shape = img_shape)
это показывает
build() получил неожиданный аргумент ключевого слова «img_shape»
Я не знаю, как решить эту проблему…и процесс создания изображения приведен ниже,
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("image shape:", img_shape)
Ответ №1:
Попробуй discriminator.build(input_shape=(1, 28, 28, 1))
:
def make_discriminator(img_shape): return tf.keras.Sequential([ tf.keras.layers.Dropout(0.3), tf.keras.layers.Conv2D(32, 5, strides = 2, padding='same', input_shape = img_shape, use_bias = False), tf.keras.layers.BatchNormalization(), tf.keras.layers.LeakyReLU(), tf.keras.layers.Conv2D(64, 5, strides = 2, padding = 'same', use_bias = False), tf.keras.layers.BatchNormalization(), tf.keras.layers.LeakyReLU(), tf.keras.layers.Flatten(), tf.keras.layers.Dense(1) ], "Discriminator") discriminator = make_discriminator((28, 28, 1)) discriminator.build(input_shape=(1, 28, 28, 1)) print(discriminator.summary())
Или установите input_shape
в первом слое вашей модели. Затем будут выведены остальные выходные формы, и вам не нужно будет вызывать model.build()
:
def make_discriminator(img_shape): return tf.keras.Sequential([ tf.keras.layers.Dropout(0.3, input_shape = img_shape), tf.keras.layers.Conv2D(32, 5, strides = 2, padding='same', use_bias = False), tf.keras.layers.BatchNormalization(), tf.keras.layers.LeakyReLU(), tf.keras.layers.Conv2D(64, 5, strides = 2, padding = 'same', use_bias = False), tf.keras.layers.BatchNormalization(), tf.keras.layers.LeakyReLU(), tf.keras.layers.Flatten(), tf.keras.layers.Dense(1) ], "Discriminator") discriminator = make_discriminator((28, 28, 1)) print(discriminator.summary())