刚学习神经网络,在用tensorflow做猫狗图像识别的时候遇到了一个问题,验证集精度直接全为0.5
代码如下:
def createModel():
inputs = keras.Input(shape=(180,180,3))
x = layers.Rescaling(1./255)(inputs)
x = layers.Conv2D(filters=32,kernel_size=3,activation="relu")(x)
x = layers.MaxPooling2D(pool_size=2)(x)
x = layers.Conv2D(filters=64,kernel_size=3,activation="relu")(x)
x = layers.MaxPooling2D(pool_size=2)(x)
x = layers.Conv2D(filters=128,kernel_size=3,activation="relu")(x)
x = layers.MaxPooling2D(pool_size=2)(x)
x = layers.Conv2D(filters=256,kernel_size=3,activation="relu")(x)
x = layers.MaxPooling2D(pool_size=2)(x)
x = layers.Conv2D(filters=256,kernel_size=3,activation="relu")(x)
x = layers.Flatten()(x)
outputs = layers.Dense(1,activation="sigmoid")(x)
model = keras.Model(inputs = inputs,outputs = outputs)
model.compile(loss="binary_crossentropy",optimizer="rmsprop",metrics=["accuracy"])
return model
train_dataset = image_dataset_from_directory(
new_base_Dir/"train",
image_size=(180,180),
batch_size=32,
shuffle=False
)
validation_dataset = image_dataset_from_directory(
new_base_Dir/"validation",
image_size=(180,180),
batch_size=32,
shuffle=False
)
test_dataset = image_dataset_from_directory(
new_base_Dir/"test",
image_size=(180,180),
batch_size=32
)
callbacks = [keras.callbacks.ModelCheckpoint(
filepath="convet_from_scratch.keras",
save_best_only=True,
monitor="val_loss"
)]
history = createModel().fit(train_dataset,epochs=30,validation_data=validation_dataset,callbacks=callbacks)
发现问题了。。。我太蠢了,shuffle属性要设置为True,让他打乱