如何确保每次训练Keras模型时权重都是随机初始化的

我正在为我的数据训练一个Keras模型。我需要将数据分成三部分,并对每个部分调用相同的Keras模型,尝试连续进行拟合和预测。

我怀疑每次调用模型时,模型的权重在上次训练达到收敛后保持不变。下一个调用的模型开始从其先前的状态最小化误差。我希望每次训练模型时,都能从不同的随机权重初始化开始进行数据拟合。因为我的三个数据集分割都是同一数据集的子集,我不希望模型在训练时因提前看到分割数据而发生数据泄漏。

我能知道每次模型拟合时是否重新初始化权重吗?如果没有,如何实现呢?

这是我的代码示例

model = Sequential()model.add(Dense(512, input_dim=77, kernel_initializer='RandomNormal', activation='relu'))model.add(Dropout(0.2))model.add(Dense(256, kernel_initializer='RandomNormal', activation='relu'))model.add(Dropout(0.2))model.add(Dense(512, kernel_initializer='RandomNormal', activation='relu'))model.add(Dropout(0.2))model.add(Dense(256, kernel_initializer='RandomNormal', activation='relu'))model.add(Dropout(0.2))model.add(Dense(512, kernel_initializer='RandomNormal', activation='relu'))model.add(Dropout(0.2))model.add(Dense(256, kernel_initializer='RandomNormal', activation='relu'))model.add(Dropout(0.2))model.add(Dense(1))# Compile modelmodel.compile(loss='mean_absolute_error', optimizer='adam')model()# evaluate modelhistory = model.fit(scaler.transform(X_train_high), y_train_high,                    batch_size=128,                    epochs=5)results = model.evaluate(scaler.transform(X_train_high), y_train_high, batch_size=128)print('High test loss, test acc:', results)# evaluate modelhistory = model.fit(scaler.transform(X_train_medium), y_train_medium,                    batch_size=128,                    epochs=5)results = model.evaluate(scaler.transform(X_train_medium), y_train_medium, batch_size=128)print(' Medium test loss, test acc:', results)# evaluate modelhistory = model.fit(scaler.transform(X_train_low), y_train_low,                    batch_size=128,                    epochs=5)results = model.evaluate(scaler.transform(X_train_low), y_train_low, batch_size=128, epochs=5)print('Low test loss, test acc:', results)

回答:

模型会保持其权重,直到你重新定义一个新的模型。

def define_model():    model = Sequential()    model.add(Dense(512, input_dim=77, kernel_initializer='RandomNormal', activation='relu'))    model.add(Dropout(0.2))    model.add(Dense(256, kernel_initializer='RandomNormal', activation='relu'))    model.add(Dropout(0.2))    model.add(Dense(512, kernel_initializer='RandomNormal', activation='relu'))    model.add(Dropout(0.2))    model.add(Dense(256, kernel_initializer='RandomNormal', activation='relu'))    model.add(Dropout(0.2))    model.add(Dense(512, kernel_initializer='RandomNormal', activation='relu'))    model.add(Dropout(0.2))    model.add(Dense(256, kernel_initializer='RandomNormal', activation='relu'))    model.add(Dropout(0.2))    model.add(Dense(1))model=define_model()# Compile modelmodel.compile(loss='mean_absolute_error', optimizer='adam')# evaluate modelhistory = model.fit(scaler.transform(X_train_high), y_train_high,                    batch_size=128,                    epochs=5)results = model.evaluate(scaler.transform(X_train_high), y_train_high, batch_size=128)print('High test loss, test acc:', results)model=define_model()model.compile(loss='mean_absolute_error', optimizer='adam')# evaluate modelhistory = model.fit(scaler.transform(X_train_medium), y_train_medium,                    batch_size=128,                    epochs=5)results = model.evaluate(scaler.transform(X_train_medium), y_train_medium, batch_size=128)print(' Medium test loss, test acc:', results)

你可以通过model.get_weights来检查。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注