2016-04-13 14 views
3

最近テンソルの流れをskflowに切り替えました。テンソルフローでは、私たちのラムダ* tf.nn.l2_loss(重み)を私たちの損失に加えます。今、私はskflowで次のコードを持っています:正式版をskflowに追加する

def deep_psi(X, y): 
    layers = skflow.ops.dnn(X, [5, 10, 20, 10, 5], keep_prob=0.5) 
    preds, loss = skflow.models.logistic_regression(layers, y) 
    return preds, loss 

def exp_decay(global_step): 
    return tf.train.exponential_decay(learning_rate=0.01, 
             global_step=global_step, 
             decay_steps=1000, 
             decay_rate=0.005) 

deep_cd = skflow.TensorFlowEstimator(model_fn=deep_psi, 
            n_classes=2, 
            steps=10000, 
            batch_size=10, 
            learning_rate=exp_decay, 
            verbose=True,) 

ここに正規化子を追加する方法と場所は? Illiaは何かをヒントしますhereしかし私はそれを把握できませんでした。

答えて

3

あなたはまだ損失にコンポーネントを追加することができ、あなただけのDNN/logistic_regressionから重みを取得し、ロスにそれらを追加する必要があります。

def regularize_loss(loss, weights, lambda): 
    for weight in weights: 
     loss = loss + lambda * tf.nn.l2_loss(weight) 
    return loss  


def deep_psi(X, y): 
    layers = skflow.ops.dnn(X, [5, 10, 20, 10, 5], keep_prob=0.5) 
    preds, loss = skflow.models.logistic_regression(layers, y) 

    weights = [] 
    for layer in range(5): # n layers you passed to dnn 
     weights.append(tf.get_variable("dnn/layer%d/linear/Matrix" % layer)) 
     # biases are also available at dnn/layer%d/linear/Bias 
    weights.append(tf.get_variable('logistic_regression/weights')) 

    return preds, regularize_loss(loss, weights, lambda) 

`` `

注意、変数へのパスfound hereにすることができます。

はまた、我々は変数で、すべての層に正則のサポートを追加したい(のようなdnnconv2dまたはfully_connected)ので、このdnn(.., regularize=tf.contrib.layers.l2_regularizer(lambda))のようなものを持っている必要がありTensorflowの来週のナイトビルドかもしれません。これが起こると、私はこの答えを更新します。

+0

dnn(..、regularize = tf.contrib.layers.l2_regularizer(lambda))も愛でしょう。 – plumSemPy

関連する問題