循环 model.fit 时无法重置模型

使用 Keras,我尝试使用不同的数据分割循环训练会话 10 次。不过,在每个循环之后,我的准确性会提高很多,可能是因为它不会重置并在新组中看到新数据(训练的数据可能会出现在测试下一个循环中)

我预计 model.fit 会重置它,如公关所示。这里的答案说它是这样的,但我无法做到。然后我在循环开始时尝试了 K.clear_session() ,如 pr 所示。示例 1 在这里,但它什么也没做。我可以第一次保存未经训练的模型并在循环开始时重新加载它,但这似乎是一个不好的方法/不好的做法。我能做什么/我做错了吗?

from tensorflow.keras import backend as K


for i in range(0, 10):

    print("Starting loop " + str(i))

    K.clear_session()

    model = keras.Model(inputs=inputs, outputs=outputs, name="SchoolProject")

    model.compile(loss=tensorflow.keras.losses.binary_crossentropy, optimizer=tensorflow.keras.optimizers.Adam(lr=hpInitialLearningRate), metrics=['accuracy'])

    trainData, valData, testData, trainTruth, valTruth, testTruth = getTrainValAndTestSet()

    model.fit(trainData, trainTruth, epochs=hpEpochs, verbose=1, callbacks=callbacks_list, validation_data=(valData, valTruth))

    score = model.evaluate(testData, testTruth, verbose=1)

    print('Test loss:', score[0])

    print('Test accuracy:', score[1])

    testAccList.append(score[1])

    print("Ending loop " + str(i))


不负相思意
浏览 92回答 1
1回答

波斯汪

最简单的方法是在循环内定义模型。这是一个例子。您会看到每次迭代,准确性都会随机开始,然后才会提高。import tensorflow as tf(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()x_train = x_train.astype("float32") / 255x_test = x_test.astype("float32") / 255for i in range(5):    model = tf.keras.Sequential([            tf.keras.Input(shape=(28, 28)),            tf.keras.layers.Flatten(),            tf.keras.layers.Dense(32, activation='relu'),            tf.keras.layers.Dense(64, activation='relu'),            tf.keras.layers.Dense(10, activation="softmax"),        ])    model.compile(loss="sparse_categorical_crossentropy", optimizer="adam",                  metrics=["accuracy"])    model.fit(x_train, y_train, batch_size=16, epochs=1, validation_split=0.1)手动重置权重稍微复杂一些。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python