首页 > 解决方案 > DNNClassifier - 训练后如何获取各层的参数

问题描述

def Classifier(parameters):

    learning = parameters[0]
    layers = parameters[1]
    nodes = parameters[2]
    hidden_layers =  [nodes for i in range(layers)]
    activation_function = tf.nn.sigmoid if parameters[3] == 0 else tf.nn.relu



    age_var = tf.feature_column.numeric_column('Age')
    shape_var = tf.feature_column.numeric_column('Shape')
    margin_var = tf.feature_column.numeric_column('Margin')
    density_var =tf.feature_column.numeric_column('Density')
    features = [age_var,shape_var,margin_var,density_var]

    return tf.estimator.DNNClassifier(hidden_units=hidden_layers, 
                                      n_classes=2,
                                      feature_columns=features, 
                                      activation_fn=activation_function,
                                      model_dir='/tmp/'+uuid.uuid4().hex,
                                      optimizer=tf.train.AdamOptimizer(learning_rate=learning),
                                      config=tf.contrib.learn.RunConfig(save_checkpoints_steps=250,
                                                                        save_checkpoints_secs=None,
                                                                        save_summary_steps=500))

训练如上定义的模型后,是否可以得到各层的参数?

如果是的话,你能给我这个命令吗

我是新手/正在学习 tensorflow

标签: tensorflowartificial-intelligence

解决方案


我简单的方法是遍历函数DNNClassifier返回的模型的变量名称列表Classifier并调用get_variable_value传递每个变量的名称:

for variable_name in model.get_variable_names():
    print('Parameter Name: ', variable_name, ' Parameter Value: ', model.get_variable_value(variable_name))

但这仍然需要您选择每个单层的权重(默认情况下/hiddenlayer_0/...,它的模型隐藏层/hiddenlayer_1/...的名称是 等)。DNNClassifier

您将不得不遍历这些参数名称并仅获取名称中包含的那些参数的值hiddenlayer_<num>,这意味着执行一些字符串模式匹配。例如:

hidden_layer_0_params = {}
for variable_name in model.get_variable_names():
    if variable_name.startswith("dnn/hiddenlayer0"):
        hidden_layer_0_params[variable_name] = model.get_variable_value(variable_name)

不过,您可以帮助改善这一点!一种方法是先创建和编译一个单独的tf.keras模型,然后使用该tf.keras.estimator.model_to_estimator函数将其转换为所需的估计器实例。

其优势的原因是tf.keras它的模型参数命名更好一些,并且默认情况下它们没有dnn/hiddenlayer_图层参数名称的前缀。例如,tf.keras模型的参数名称将没有前缀,并且layer_with_weights-0/bias默认格式化。

是一个很好的教程,可以从 keras 模型创建估计器实例并将其用于训练和评估。


推荐阅读