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

Python 如何转换数据格式以用于VGG16深度学习,python,machine-learning,keras,deep-learning,Python,Machine Learning,Keras,Deep Learning,我正在准备训练和测试数据,这些数据将用于我使用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

我正在准备训练和测试数据,这些数据将用于我使用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_测试以运行训练?我离目标很远吗?

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

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

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


有关ZeroPadding2D层的更多信息,请参阅其文档。

您的第一个问题是2304不是224平方,因此重塑的大小是wrong@Mike你有什么建议我做的吗?谢谢你,我对你的数据参数有点困惑。很明显,您有3个颜色通道,但26869和2304是什么?我假设其中一个是图像的数量,另一个是你照片的扁平版本的大小?@迈克:是的。我将这组数据与knn一起使用,之前需要48 x 48灰度。我想我可以在这些基础上重塑。
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