Tensorflow DNNClassifier预测为数组

时间:2018-02-20 10:26:08

标签: python python-3.x tensorflow neural-network

欢迎任何建议,因为这是一个雄心勃勃的第二个编码项目。 :) 具体来说,我对这个DNN有两个不同的问题。

  1. 我似乎只能运行100个评估步骤中的1个,
  2. 无法获得有意义的预测。
  3. 在某些时候,它正在运行所有100个评估步骤。我现在似乎无法复制任何东西。我错过了什么?

    数据集适用于骰子游戏。我正在寻找的预测将是与特征和标签相同形状的数组,并对阵列中的每个位置进行二元预测。

    我尝试了不同的阵列形状和深度,以至于我都转过身来。也许一个不同的估算器是解决方案?如果我尝试将一个要素/标签组合提供给预测变量,它会抛出features dictionary '1' not found;它需要与训练和测试集相同的设置大小。

    有没有办法以这种方式返回预测?

    示例:

    predict_feature = {'0': [1, 2, 5, 1, 4, 3]} #1's and  5's would be 'keepers'
    predict_label = np.array([1, 0, 1, 1, 0, 0])
    desired output = np.array[.91, .12, .89, .92, .06, .15]
    

    随机生成要素,并通过游戏中的评分算法创建标签。它们通过下面的内容来创建特征字典并将标签放入数组中。类似的函数创建了评估和预测集。

    def train_evaluation_set(features, labels):
        """Creates training input set"""
        feature = {}
        features = [[digit for digit in features[x]] for x in range(len(features))]
        for x in range(len(features)):
            feature.update({"{}".format(x): features[x]})
        label = np.array(labels)
        return feature, label
    

    然后创建张量。

    def train_input_fn(feature, label, batch_size):
        """Input function for training"""
        dataset = tf.data.Dataset.from_tensor_slices((dict(feature), label))
        dataset = dataset.shuffle(shuffle_x).repeat().batch(100)
        iterator = dataset.make_one_shot_iterator()
        feature, label = iterator.get_next()
        return feature, label
    

    估算器就这样建立起来了:

    def main(main=None, argv=None):
        # Set feature columns.
        my_feature_columns = []
        for key in feature.keys():
            my_feature_columns.append(tf.feature_column.numeric_column(key=key))
    
        # Instantiate estimator.
        classifier = tf.estimator.DNNClassifier(
            feature_columns=my_feature_columns,
            hidden_units=[100, 100, 100],
            n_classes=2)
    
        # Train the Model.
        classifier.train(
            input_fn=lambda: train_input_fn(feature, label, batch_size),
            steps=train_steps)
    
        # Evaluate the model.
        eval_result = classifier.evaluate(
            input_fn=lambda: eval_input_fn(test_feature, test_label, batch_size),
            steps=200)
    
        print('\nTest set accuracy: {accuracy:0.3f}\n'.format(**eval_result))
    
        # Generate predictions from the model
        predictions = classifier.predict(
            input_fn=lambda: predict_input_fn(predict_feature, predict_label[0]))
    
        pp.pprint(next(predictions))
    

    从这里开始,培训顺利进行,并完成一个评估步骤。

    INFO:tensorflow:Loss for final step: 0.00292182.
    WARNING:tensorflow:Casting <dtype: 'float32'> labels to bool.
    WARNING:tensorflow:Casting <dtype: 'float32'> labels to bool.
    INFO:tensorflow:Starting evaluation at 2018-02-20-09:06:14
    INFO:tensorflow:Restoring parameters from C:\Users\Paul\AppData\Local\Temp\tmp97u0tbvx\model.ckpt-1000
    INFO:tensorflow:Evaluation [1/200]
    INFO:tensorflow:Finished evaluation at 2018-02-20-09:06:19
    INFO:tensorflow:Saving dict for global step 1000: accuracy = 0.666667, accuracy_baseline = 0.833333, auc = 0.8, auc_precision_recall = 0.25, average_loss = 0.623973, global_step = 1000, label/mean = 0.166667, loss = 3.74384, prediction/mean = 0.216801
    
    Test set accuracy: 0.667
    

    我怀疑WARNING步骤是我预测的问题所在,即使标签已被标注,但不知道如何处理它。

    最后,漂亮的印刷品给了我:

    {'class_ids': array([1], dtype=int64),
     'classes': array([b'1'], dtype=object),
     'logistic': array([ 0.70525986], dtype=float32),
     'logits': array([ 0.87247205], dtype=float32),
     'probabilities': array([ 0.2947402 ,  0.70525986], dtype=float32)}
    

    可在https://github.com/llpk79/DNNTenThousand

    找到完整代码

0 个答案:

没有答案