Меня интересует, как повысить точность модели и узнать, где модель точна.
Я также пробовал регрессию гауссовского процесса и KNeighborsRegressor, но до сих пор не смог получить ееработать для этой проблемы.
Я работаю над созданием суррогатной модели для решателя PDE.Решатель PDE выводит некоторые данные, а затем я вычисляю некоторые метрики на основе этих данных.Есть около 2-6 параметров, которые я хочу смоделировать вместе с 4-10 выходами.(Есть много других параметров, но они фиксированы, поэтому я не моделирую их)
Все мои данные генерируются без шума вообще, и при запуске одного и того же входа будет получен идентичный вывод.Обычно я запускаю генетический алгоритм на симуляторе, а затем запускаю на нем MCMC, чтобы получить достоверность параметров.Проблема в том, что это действительно медленно, так как симулятор приходится запускать так много раз (миллионы), и я бы хотел вместо этого вызывать нейронную сеть в областях, где я могу быть уверен в ее выходе.
Как этосейчас стоит моя сеть примерно на 35% (абсолютная ошибка <0,01 с выходами, работающими от 0,0 до 1,0) с точностью, основанной на использовании первых 4% (8K строк) данных и прогнозировании остальных 96% (140K строк). </p>
Это мой текущий дизайн модели
слоев = 10, нейронов = 30, virtual_batch_size = 64, bach_size = 8192, оптимизатор = 'Адам'
def get_model(settings):
with tf.device('/gpu:0'):
inputs = tf.keras.Input(shape=(settings.input_dim,))
outputs = []
for dim in range(settings.output_dim):
for layer in range(settings.layers):
dense = tf.keras.layers.Dense(settings.neurons,
kernel_regularizer=tf.keras.regularizers.l2(0.001),
kernel_initializer='he_normal')
if layer == 0:
x = dense(inputs)
else:
x = dense(x)
x = tf.keras.layers.PReLU()(x)
if layer < (settings.layers - 1):
x = tf.layers.BatchNormalization(virtual_batch_size=settings.virtual_batch_size)(x)
outputs.append(tf.keras.layers.Dense(1, activation='linear',
kernel_initializer='he_normal')(x))
outputs = tf.keras.layers.concatenate(outputs, axis=1)
model = tf.keras.Model(inputs=inputs, outputs=outputs)
model.compile(loss='mse',
optimizer=settings.optimizer,
metrics=['mse', 'mae'])
return model