代码之家  ›  专栏  ›  技术社区  ›  malioboro gaurav_iphone

张量流估计:不同的历元数给出相同的结果

  •  0
  • malioboro gaurav_iphone  · 技术社区  · 6 年前

    我想用TF估计建立一个简单的模型。以下是我的代码:

    num_epoch = 4
    num_train = 186
    num_test = 81
    
    # 1 Define input function
    def input_function(x, y, is_train):
    
        dict_x = {
            "featurename" : x,
        }
    
        dataset = tf.data.Dataset.from_tensor_slices((
            dict_x, y
        ))
    
        if is_train:
            dataset = dataset.shuffle(num_train, seed=113).repeat(num_epoch).batch(num_train)
        else:   
            dataset = dataset.batch(num_test)
        return dataset
    
    def my_serving_input_fn2():
        input_data = {
            "featurename" : tf.placeholder(tf.float32, [None, 15], name='inputtensors')
        }
        return tf.estimator.export.ServingInputReceiver(input_data, input_data)
    
    
    def main(argv):
        tf.set_random_seed(113)
        np.random.seed(113)
        run_config = tf.estimator.RunConfig(save_summary_steps=None, save_checkpoints_secs=None, tf_random_seed=113)
    
        # 2 Define feature columns
        feature_columns = [
            tf.feature_column.numeric_column(key="featurename",shape=15),
        ]
    
        # 3 Define an estimator
        classifier = tf.estimator.DNNClassifier(
            feature_columns=feature_columns,
            hidden_units=[15, 15],
            n_classes=3,
            optimizer=tf.train.AdamOptimizer(),
            activation_fn=tf.nn.relu,
            model_dir = 'models/',
            config=run_config
        )
    
        # Train the model
        classifier.train(
            input_fn=lambda:input_function(X_train, y_train, True)
        )
    
        # Evaluate the model
        eval_result = classifier.evaluate(
            input_fn=lambda:input_function(X_test, y_test, False)
        )
    
        print('\nTest set accuracy: {accuracy:0.3f}\n'.format(**eval_result))
    
    if __name__ == "__main__":
        os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' 
        tf.app.run(main)
    

    我相信模特会被训练的 num_epoch 影响数据集的 repeat() . 我没有定义 steps input_fn 生成 tf.errors.OutOfRange

    但如果我改变 它总是给出相同的结果。例如,当我使用 num_epoch=4 num_epoch=400 测试集的精度将相同。

    我是不是误解了这里的训练过程?或者只是巧合?我希望有人能帮我解释为什么会这样

    1 回复  |  直到 6 年前
        1
  •  0
  •   maxadorable    6 年前

    可能是因为你没有足够的数据。你所做的是在相同的数据上训练它,并达到“智力”的顶峰。基本上增加数据集,您将看到 num-epoch