Python 验证数据的形状应该是什么?

Python 验证数据的形状应该是什么?,python,tensorflow,machine-learning,keras,deep-learning,Python,Tensorflow,Machine Learning,Keras,Deep Learning,这是培训数据形状和验证数据形状 print(data.shape) print(val_data.shape) (20000, 120, 120, 1) (4946, 120, 120, 1) 这意味着我有20000个训练数据和4946个验证数据,图片的高度和宽度为120。 在第一个conv层中,我应该以input_shape=data.shape[1:]120120,1的形式传递数据,我在这里已经完成了。 对于model.fit函数中的验证数据,当我通过验证时,val\u data=val

这是培训数据形状和验证数据形状

print(data.shape)
print(val_data.shape)

(20000, 120, 120, 1)
(4946, 120, 120, 1)
这意味着我有20000个训练数据和4946个验证数据,图片的高度和宽度为120。 在第一个conv层中,我应该以input_shape=data.shape[1:]120120,1的形式传递数据,我在这里已经完成了。 对于model.fit函数中的验证数据,当我通过验证时,val\u data=val\u data.shape[1:],val\u标签给出错误,但当我通过验证时,val\u data=val\u data.shape,val\u标签起作用。我对此有点困惑。对不起,这是一个小问题,但由于我是CNN的新手,我遇到了麻烦。我有几个问题

模型是如何训练的,以及如何通过参数validation_data=val_data.shape,val_label提供验证精度的? 我是否应该像在第一个conv层中那样,更改与训练数据类似的验证数据的形状? 如何更改val_数据形状中的验证数据。形状[1:]? 下面是模型的完整代码

model = Sequential()
model.add(Conv2D(32, kernel_size=(3,3), strides=(1,1), padding='same', activation="relu", input_shape = data.shape[1:])) 
model.add(MaxPool2D(pool_size=(2,2), strides=(2,2))) 

model.add(Conv2D(64, kernel_size=(3,3), padding='same', strides=(1,1), activation="relu") )
model.add(MaxPool2D(pool_size=(2,2), strides=(2,2))) #max pool window 2x2

model.add(Conv2D(128, kernel_size=(3,3), padding='same', strides=(1,1), activation="relu"))
model.add(MaxPool2D(pool_size=(2,2), strides=(2,2))) #max pool window 2x2

model.add(Conv2D(256, kernel_size=(3,3), padding='same', strides=(1,1), activation="relu"))
model.add(MaxPool2D(pool_size=(2,2), strides=(2,2))) #max pool window 2x2

model.add(Conv2D(512, kernel_size=(3,3), padding='same', strides=(1,1), activation="relu"))
model.add(MaxPool2D(pool_size=(2,2), strides=(2,2)))

model.add(Flatten()) 

model.add(Dense(512, activation="relu", name='firstDenseLayer'))
model.add(Dense(256, activation='relu'))
model.add(Dense(1, activation="sigmoid"))

model.summary()

model.compile(loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"])

model.fit(data, label, batch_size=16, epochs=10, validation_data=(val_data.shape[1:], val_label))
您正在使用。安装不正确。您必须传递数据而不是形状:

model.fit(data, label, batch_size=16, epochs=10, validation_data=(val_data, val_label))

model.fit希望您以元组数据标签的形式提供验证数据。您的验证数据已处于正确的形状。model.fit希望验证数据与高度、宽度和带宽的培训数据具有相同的维度。如果不相同,则会抛出错误。

如我所述,当我使用model.fitdata、label、batch_size=16、epochs=10、validation_data=val_data、val_label时,模型不会给出错误。这就是我的问题,为什么它会起作用?培训数据集和验证数据集具有相同数量的维度。在第一个卷积层中,我必须将训练数据形状设置为输入_shape=data.shape[1:]。我是否需要对model.fit中的val_数据执行相同的操作?在第一个卷积层中,我必须将训练数据形状设置为input_shape=data.shape[1:]。我不需要对model.fit中的val_数据做同样的事情吗?不需要做任何更改,我不知道你为什么要问这个问题,但输入形状只指特征,样本维度是可变的,不是输入形状的一部分,这就是为什么它同时适用于训练和验证数据。