【问题标题】:DNNClassifier - How to obtain the parameters of various layers after trainingDNNClassifier - 训练后如何获取各层的参数
【发布时间】:2020-06-02 11:34:38
【问题描述】:
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

【问题讨论】:

    标签: tensorflow artificial-intelligence


    【解决方案1】:

    我的简单方法是遍历Classifier 函数返回的DNNClassifier 模型的变量名称列表,并调用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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-06
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 2019-05-28
      • 1970-01-01
      • 1970-01-01
      • 2019-11-01
      相关资源
      最近更新 更多