Реализация потерь l2 в тензорном потоке Модель последовательной регрессии - PullRequest
0 голосов
/ 25 октября 2019

Я создал модель керазензорного потока, находящуюся под сильным влиянием этого руководства , которое выглядит как

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
import time 
import numpy as np
import sys
from keras import losses


model = keras.Sequential()
model.add(layers.Dense(nodes,activation = tf.keras.activations.relu, input_shape=[len(data_initial.keys())]))
model.add(layers.Dense(64,activation = tf.keras.activations.relu))
model.add(layers.Dropout(0.1, noise_shape=None))
model.add(layers.Dense(1))

model.compile(loss='mse',    # <-------- Here we define the loss function 
              optimizer=tf.keras.optimizers.Adam(lr= 0.01,
                                                beta_1 = 0.01,
                                                beta_2 = 0.001,
                                                epsilon= 0.03),
                                                metrics=['mae', 'mse'])
model.fit(train_data,train_labels,epochs = 200)

Это регрессионная модель, а не loss = 'mse' Я хотел бы использовать tf keras mse loss вместе с L2-членом регуляризации . Вопрос в том,

  • Как добавить предопределенную функцию регуляризатора (я думаю, это эта ) в оператор model.compile ,

  • Как написать полностью настраиваемую функцию потерь и добавить ее в model.compile .

1 Ответ

1 голос
/ 25 октября 2019

Вы можете добавить регуляризацию как параметр слоя или как слой.

Используйте его в качестве параметра слоя, как показано ниже

model.add(layers.Dense(8, 
          kernel_regularizer=regularizers.l2(0.01),
          activity_regularizer=regularizers.l1(0.01)))

Пример кода с упорядоченным первым плотным слоем и пользовательской функцией потерь

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
import time 
import numpy as np
import sys
from keras import losses
from keras import regularizers
import keras.backend as K


model = keras.Sequential()
model.add(layers.Dense(8,activation = tf.keras.activations.relu, input_shape=(8,), 
                       kernel_regularizer=regularizers.l2(0.01), 
                       activity_regularizer=regularizers.l1(0.01)))

model.add(layers.Dense(4,activation = tf.keras.activations.relu))
model.add(layers.Dropout(0.1, noise_shape=None))
model.add(layers.Dense(1))


def custom_loss(y_true, y_pred):
    return K.mean(y_true - y_pred)**2

model.compile(loss=custom_loss,
              optimizer=tf.keras.optimizers.Adam(lr= 0.01,
                                                beta_1 = 0.01,
                                                beta_2 = 0.001,
                                                epsilon= 0.03),
                                                metrics=['mae', 'mse'])

model.fit(np.random.randn(10,8),np.random.randn(10,1),epochs = 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...