如何转换数据格式以用于VGG16深度学习

2024-04-20 03:54:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在准备训练和测试数据,这些数据将用于我使用VGG16的面部表情识别模型。经过一些研究,我已经知道所需的数据格式应该是(大小,2242243)。到目前为止,我得到了:

X_train_ (26859, 2304, 3)
y_train (26859,)
X_test (1044, 2304, 3)
y_test (1044,)

但当我试图通过

X_train.reshape((26859, 224, 224, 3))

我得到

ValueError: cannot reshape array of size 185649408 into shape (26859,224,224,3)

我认为我的y_训练和y_测试都很好,但我应该如何处理X_训练和X_测试以运行训练?我离目标很远吗


Tags: of数据模型testsizetrainarray表情
2条回答
IMAGE_SIZE = [512, 512] # any image size 192, 224, 331, 512
# 512 works for TPU as GPU has memory limit
# Decode Function
def decode_image(image_data):
    image = tf.image.decode_jpeg(image_data, channels=3)
    image = tf.cast(image, tf.float32) / 255.0  # convert image to floats in [0, 1] range
    image = tf.reshape(image, [*IMAGE_SIZE, 3]) # size needed for TRAINING
    return image

# Now train with ant pretrained models
pretrained_model = tf.keras.applications.VGG16(weights='imagenet', include_top=False ,input_shape=[*IMAGE_SIZE, 3])
pretrained_model.trainable = False # False = transfer learning, True = fine-tuning

要解决此问题,应首先使用reshape函数将数据转换为具有形状(26859, 48, 48, 3)的张量,如下所示:

X_train.reshape((26859, 48, 48, 3))

之后,由于VGG16网络接受形状为(size, 224, 224, 3)的张量,因此应该使用零填充向训练和测试图像的边界插入额外的零,以增加它们的宽度和高度

对输入张量进行零填充的可用函数之一是tf.keras.layers.ZeroPadding2D。它是一个额外的层,将零填充应用于输入张量

有关ZeroPadding2D层的更多信息,请参阅其文档tf.keras.layers.ZeroPadding2D API DOC

相关问题 更多 >