【问题标题】:Implementing an l2 loss into a tensorflow Sequential regression model在张量流顺序回归模型中实现 l2 损失
【发布时间】:2020-02-21 16:59:39
【问题描述】:

我创建了一个 keras-tensorflow 模型,受以下因素影响很大 this guide 看起来像

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 语句中添加预定义的正则化函数(我认为是 this one )。

  • 如何编写完全自定义的损失函数并将其添加到 model.compile

【问题讨论】:

    标签: python-3.x tensorflow keras


    【解决方案1】:

    可以将正则化添加为图层参数或作为图层。

    将其用作图层参数如下下面

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

    使用第一密集层的样本代码正规化和自定义丢失功能 h3>
    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)
    

    【讨论】:

    • 如果您有自定义训练循环,您将如何执行此操作?您是自己添加正则化,还是仍然考虑到 keras 参数? :)
    猜你喜欢
    • 2018-02-03
    • 1970-01-01
    • 2018-12-16
    • 2018-12-07
    • 1970-01-01
    • 2017-12-22
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多