我正在为我的数据训练一个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
来检查。