2017-07-26 5 views
8

फिटिंग करते समय टेंसरफ्लो क्रैश हो जाता है, मैं TensorForestEstimator मॉडल पर फिट करने की कोशिश कर रहा हूं जिसमें संख्यात्मक फ्लोटिंग-पॉइंट डेटा 7 फीचर्स और 7 लेबल का प्रतिनिधित्व करता है। यही है, features और labels दोनों का आकार (484876, 7) है। मैंने num_classes=7 और num_features=7ForestHParams में उचित रूप से सेट किया है। डाटा का स्वरूप इस प्रकार है:टेन्सोरफ्लोस्टीमीटर

f1  f2  f3 f4  f5 f6 f7 l1  l2  l3  l4  l5  l6  l7 
39000.0 120.0 65.0 1000.0 25.0 0.69 3.94 39000.0 39959.0 42099.0 46153.0 49969.0 54127.0 55911.0 
32000.0 185.0 65.0 1000.0 75.0 0.46 2.19 32000.0 37813.0 43074.0 48528.0 54273.0 60885.0 63810.0 
30000.0 185.0 65.0 1000.0 25.0 0.41 1.80 30000.0 32481.0 35409.0 39145.0 42750.0 46678.0 48595.0 

जब fit() अजगर निम्न संदेश के साथ दुर्घटनाओं बुला:

अजगर अनपेक्षित रूप से बंद है, जबकि _pywrap_tensorflow_internal.so प्लग-इन का उपयोग कर।

यहाँ जब tf.logging.set_verbosity('INFO') सक्रिय करने के उत्पादन होता है:

INFO:tensorflow:training graph for tree: 0 
INFO:tensorflow:training graph for tree: 1 
... 
INFO:tensorflow:training graph for tree: 9998 
INFO:tensorflow:training graph for tree: 9999 
INFO:tensorflow:Create CheckpointSaverHook. 
2017-07-26 10:25:30.908894: F tensorflow/contrib/tensor_forest/kernels/count_extremely_random_stats_op.cc:404] 
Check failed: column < num_classes_ (39001 vs. 8) 

Process finished with exit code 134 (interrupted by signal 6: SIGABRT) 

मुझे यकीन है कि क्या इस त्रुटि का अर्थ है, यह वास्तव में num_classes=7, नहीं 8 के बाद से और सुविधाओं के आकार के रूप में मतलब नहीं है नहीं कर रहा हूँ और लेबल (484876, 7) है, मुझे नहीं पता कि 3 9 001 कहां से आ रहा है।

यहाँ कोड पुन: पेश करने के लिए है:

import numpy as np 
import pandas as pd 
import os 

def get_training_data(): 
    training_file = "data.txt" 
    data = pd.read_csv(training_file, sep='\t') 

    X = np.array(data.drop('Result', axis=1), dtype=np.float32) 

    y = [] 
    for e in data.ResultStr: 
     y.append(list(np.array(str(e).replace('[', '').replace(']', '').split(',')))) 

    y = np.array(y, dtype=np.float32) 

    features = tf.constant(X) 
    labels = tf.constant(y) 

    return features, labels 

hyperparameters = ForestHParams(
    num_trees=100, 
    max_nodes=10000, 
    bagging_fraction=1.0, 
    num_splits_to_consider=0, 
    feature_bagging_fraction=1.0, 
    max_fertile_nodes=0, 
    split_after_samples=250, 
    min_split_samples=5, 
    valid_leaf_threshold=1, 
    dominate_method='bootstrap', 
    dominate_fraction=0.99, 
    # All parameters above are default 
    num_classes=7, 
    num_features=7 
) 

estimator = TensorForestEstimator(
    params=hyperparameters, 
    # All parameters below are default 
    device_assigner=None, 
    model_dir=None, 
    graph_builder_class=RandomForestGraphs, 
    config=None, 
    weights_name=None, 
    keys_name=None, 
    feature_engineering_fn=None, 
    early_stopping_rounds=100, 
    num_trainers=1, 
    trainer_id=0, 
    report_feature_importances=False, 
    local_eval=False 
) 

estimator.fit(
    input_fn=lambda: get_training_data(), 
    max_steps=100, 
    monitors=[ 
     TensorForestLossHook(
      early_stopping_rounds=30 
     ) 
    ] 
) 

यह भी अगर मैं इसे SKCompat के साथ रैप काम नहीं करता है, एक ही त्रुटि पाए जाते हैं। इस दुर्घटना का कारण क्या है?

+0

क्या आप नमूना इनपुट डेटा प्रदान कर सकते हैं? – denfromufa

+0

मैंने इनपुट डेटा प्रदान करने के लिए प्रश्न संपादित किया। – jshapy8

उत्तर

4

regression=True को ForestHParams में निर्दिष्ट करने की आवश्यकता है क्योंकि TensorForestEstimator डिफ़ॉल्ट रूप से मानता है कि इसका उपयोग वर्गीकरण समस्या को हल करने के लिए किया जा रहा है, जो केवल एक मान आउटपुट कर सकता है।

अनुमानक के आरंभ पर बनाए गए एक अंतर्निहित num_outputs चर है और यह पर सेट किया गया है यदि regression निर्दिष्ट नहीं किया गया था। यदि regression निर्दिष्ट है, तो num_outputs = num_classes और चेकपॉइंट सामान्य रूप से सहेजे जाते हैं।