Как убедиться, что веса модели Keras инициализируются случайным образом каждый раз, когда модель подходит - PullRequest
0 голосов
/ 15 января 2020

Я тренирую модель Keras для своих данных. Я должен разделить данные на 3 части, и я вызываю одну и ту же модель keras для каждого разделения и пытаюсь согласовать и предсказать последовательно.

У меня есть подозрение, что каждый раз, когда я называю модель, вес модели остается то же самое после достижения сближения с последней тренировки. И следующая вызываемая модель начинает минимизировать ошибку из своего предыдущего состояния. Я хочу, чтобы каждый раз, когда модель обучалась, она начинала соответствовать данным из другой инициализации случайных весов. Поскольку все мои 3 разбиения являются подмножеством одного и того же набора данных, и я не хочу какой-либо утечки данных в модель из-за предварительного просмотра данных разделения во время обучения.

Могу ли я узнать, выполняет ли это повторную инициализацию весов каждые -время модель подходит. А если нет, то как я могу это сделать?

вот как выглядит мой код



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 model
model.compile(loss='mean_absolute_error', optimizer='adam')


model()
# evaluate model
history = 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 model
history = 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 model
history = 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)

1 Ответ

0 голосов
/ 21 января 2020

Модель будет сохранять свой вес, пока вы не переопределите ее.

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 model
model.compile(loss='mean_absolute_error', optimizer='adam')


# evaluate model
history = 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 model
history = 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...