2017-09-12 1 views
0

Ich versuche DNNRegressor auf einigen einfachen Daten zu laufen, damit ich seine Genauigkeit testen kann, sollte das Modell jede Banktransaktion nehmen und versuchen, seinen Preis vorherzusagen, aber ich bekomme einige seltsame Ergebnisse, die ich denke, ist Ergebnis von etwas falsch mit dem Code.Tensorflow DNNRegressor predict_score Ausgabe

Mein Code ist hier:

from __future__ import print_function 
from __future__ import division 
from __future__ import absolute_import 

import itertools 
import pandas as pd 
import numpy as np 
import tensorflow as tf 

print('Running version of tensorflow') 
print(tf.__version__) 

tf.logging.set_verbosity(tf.logging.DEBUG) 

names = [ 
    'trans', 
    'price', 
] 

predict_names = [ 
    'trans' 
] 

dtypes = { 
    'trans': str, 
    'price': np.float32, 
} 

df = pd.read_csv('simple.csv', names=names, dtype=dtypes, na_values='?') 

# Split the data into a training set and an eval set. 
training_data = df[:50] 
eval_data = df[50:] 
print("Training with this :\n") 
print(training_data) 

# Separate input features from labels 
training_label = training_data.pop('price') 
eval_label = eval_data.pop('price') 

# Feature Columns 
training_input_fn = tf.estimator.inputs.pandas_input_fn(x=training_data, y=training_label, batch_size=1, shuffle=True, num_epochs=None) 

eval_input_fn = tf.estimator.inputs.pandas_input_fn(x=eval_data, y=eval_label, batch_size=1, shuffle=False, num_epochs=None) 

#Embed the column since its a string 
transformed_trans = tf.feature_column.categorical_column_with_hash_bucket('trans', 50) 
print("Transformed words **********************") 
print(transformed_trans) 

dnn_features = [tf.feature_column.indicator_column(transformed_trans)] 
# regressor = tf.contrib.learn.LinearRegressor(feature_columns=[trans]) 

dnnregressor = tf.contrib.learn.DNNRegressor(feature_columns=dnn_features, hidden_units=[50, 30, 10]) 

#train the model 
dnnregressor.fit(input_fn=training_input_fn, steps=1) 

# Evaluate the trianing 
dnnregressor.evaluate(input_fn=eval_input_fn, steps=1) 




# Predictions 
predictdf = pd.read_csv('simple_predict.csv', names=names, dtype=dtypes, na_values='?') 
predict_input_fn = tf.estimator.inputs.pandas_input_fn(x=predictdf,shuffle=False, num_epochs=1) 

print("Predicting scores **********************") 


y = dnnregressor.predict_scores(input_fn=predict_input_fn) 
for x in y: 
    print(str(x)+"\n") 

sieht Meine Daten wie diese

simple.csv: 

Uber,4 
Food,12 
Coffee,4 
Cafe,10 
Coffee,4 
Cafe,10 
Uber,4 
Food,12 
Coffee,4 
Cafe,10 
Coffee,4 
Cafe,10 
Uber,4 
Food,12 
Coffee,4 
Cafe,10 
Coffee,4 


simple_predict.csv: 

Uber 
Food 

ich annehmen würde, dass mit dem folgenden Datensatz, der ziemlich vorhersehbar ist i 0 Verlust erhalten wird und die Vorhersagen werden sei auf Punkt. Aber es ist überhaupt nicht der Fall, ich bekomme immer eine Vorhersage für Uber und Essen, die genau die gleichen sind und ich kann nicht einmal die Ergebnisse verstehen, die ich bekomme.

Fehlt mir irgendetwas im Code? Oder habe ich verstanden, wie DNNRegressor eigentlich funktionieren sollte?

+0

Könnte ein Hash-Problem auftreten? Vielleicht versuchen Sie 'categorical_column_with_vocabulary_list' und' embedding_column'? –

Antwort

0

Das Problem mit dem obigen Code war, dass die Hash-Rate zu niedrig war. Also, indem Sie einfach diese Hashing-Rate auf 300 statt auf 50 stoßen, wird es dann alles funktionieren.

transformed_trans = tf.feature_column.categorical_column_with_hash_bucket('trans', 300) 
Verwandte Themen