重塑 BatchDataset 训练模型的输入

Reshape the input for BatchDataset trained model

我在将图像转换为 BatchDataset 后在图像上训练了我的 tensorflow 模型

  IMG_size = 224
  INPUT_SHAPE = [None, IMG_size, IMG_size, 3] # 4D input

  model.fit(x=train_data,
            epochs=EPOCHES,
            validation_data=test_data,
            validation_freq=1, # check validation metrics every epoch
            callbacks=[tensorboard, early_stopping])


     model.compile(
      loss=tf.keras.losses.CategoricalCrossentropy(), 
      optimizer=tf.keras.optimizers.Adam(), 
      metrics=["accuracy"] 
    )


  model.build(INPUT_SHAPE)

train_data 类型是: tensorflow.python.data.ops.dataset_ops.BatchDataset.

我想 运行 我的模型在单个 numpy 数组或张量常量上,但它将是 3D 输入矩阵而不是 4D 作为输入 TensorShape([224, 224, 3]);我该如何重塑它?

您可以使用以下代码扩展图像矩阵的维度:

newImage = tf.expand_dims(Original_Image, axis = 0)

然后传给预测函数,就可以了。

目标大小使所有输入成为相同的形状。

对输入形状很有帮助,也可以使用图像函数来扩大维度。 img_array = tf.expand_dims(image, 0) # 创建一个批次

谈论你的输入 INPUT_SHAPE = [None, IMG_size, IMG_size, 3] # 4D 输入你可以通过图像训练数据集和馈入模型。

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Variables
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
BATCH_SIZE = 16
IMG_SIZE = (160, 160)
PATH = 'F:\datasets\downloads\sample\cats_dogs\training'
training_directory = os.path.join(PATH, 'train')
validation_directory = os.path.join(PATH, 'validation')

train_dataset = tf.keras.utils.image_dataset_from_directory(training_directory,
            shuffle=True,
            batch_size=BATCH_SIZE,
            image_size=IMG_SIZE,
            seed=42)
validation_dataset = tf.keras.utils.image_dataset_from_directory(validation_directory,
            shuffle=True,
            batch_size=BATCH_SIZE,
            image_size=IMG_SIZE,
            seed=42)
    
class_names = train_dataset.class_names
print( "class_names: " + str( class_names ) )

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
DataSet
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
AUTOTUNE = tf.data.experimental.AUTOTUNE
train_dataset = train_dataset.prefetch(buffer_size=AUTOTUNE)

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Model ( examine input layer )
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
inputs = tf.keras.Input(shape=(160, 160, 3))
model = tf.keras.Model(inputs, outputs)

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Training
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
history = model.fit(train_dataset, epochs=initial_epochs, validation_data=validation_dataset)

...