【发布时间】:2019-08-17 18:15:42
【问题描述】:
我有一个图像数据集,每个图像的尺寸=(2048,1536)。在 ImageDataGenerator 中从目录中获取数据,我使用了相同的目标大小,即 (2048,1536),但是在制作顺序模型第一层时,我应该使用什么输入形状?它会与 (2048,1536) 相同,还是可以采用任何随机形状,例如 (224,224)。
【问题讨论】:
标签: python keras deep-learning dataset
我有一个图像数据集,每个图像的尺寸=(2048,1536)。在 ImageDataGenerator 中从目录中获取数据,我使用了相同的目标大小,即 (2048,1536),但是在制作顺序模型第一层时,我应该使用什么输入形状?它会与 (2048,1536) 相同,还是可以采用任何随机形状,例如 (224,224)。
【问题讨论】:
标签: python keras deep-learning dataset
您可能应该通过制作大小为 3145728 (2048 * 1536) 的向量来展平输入数据。如果您的数据位于 numpy 数组中,您可以使用 np.flatten() (numpy flatten)。
那么你的第一层可以和这个向量有相同的形状。
【讨论】:
我会先用cv2.resize() 调整图像的大小。你真的需要这么大的图片中的所有信息吗?
对于顺序模型,例如:
model = models.Sequential()
model.add(layers.Conv2D(32,(3,3), activation='relu', input_shape = (height,width, ndim)))
...,
其中height 和width 表示您的输入图像尺寸,ndim = 1 表示灰度图像,ndim = 3 表示彩色图像。
【讨论】:
(200,150) 或 (100,75) - 错误和尝试。 -- 请通过model.summary()查看您的模型。这些图层将向您显示每一层的图像有多大。然后想想图片中对你很重要的信息:从这么小的图片中还能提取到信息吗?
第一个(即输入)层应该是数据集中的特征数量。关于图像,每个像素都被视为一个特征。因此,在您的情况下,图像尺寸为 (2048,1536),您需要将其展平以获得像素总数(即特征)。如果是灰度图像,则为 (2048*1536*1),否则为彩色图像,则为 (2048*1536*3)。
此外,您在创建顺序模型时使用来自 TensorFlow/Keras API 的以下代码,它将处理您的输入层大小
tf.keras.models.Sequential([tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128,activation=tf.nn.relu) #1st hidden layer
tf.keras.layers.Dense(128,activation=tf.nn.relu) #2nd hidden layer
tf.keras.layers.Dense(2,activation=tf.nn.softmax)])#output layer
【讨论】: