Ich erstelle einen DNNclassifier mit Sparse-Spalten. Die Trainingsdaten wie folgt aussieht,was TensorFlow hash_bucket_size zählt
samples col1 col2 price label
eg1 [[0,1,0,0,0,2,0,1,0,3,...] [[0,0,4,5,0,...] 5.2 0
eg2 [0,0,...] [0,0,...] 0 1
eg3 [0,0,...]] [0,0,...] 0 1
folgenden Ausschnitt erfolgreich ausgeführt werden kann,
import tensorflow as tf
sparse_feature_a = tf.contrib.layers.sparse_column_with_hash_bucket('col1', 3, dtype=tf.int32)
sparse_feature_b = tf.contrib.layers.sparse_column_with_hash_bucket('col2', 1000, dtype=tf.int32)
sparse_feature_a_emb = tf.contrib.layers.embedding_column(sparse_id_column=sparse_feature_a, dimension=2)
sparse_feature_b_emb = tf.contrib.layers.embedding_column(sparse_id_column=sparse_feature_b, dimension=2)
feature_c = tf.contrib.layers.real_valued_column('price')
estimator = tf.contrib.learn.DNNClassifier(
feature_columns=[sparse_feature_a_emb, sparse_feature_b_emb, feature_c],
hidden_units=[5, 3],
n_classes=2,
model_dir='./tfTmp/tfTmp0')
# Input builders
def input_fn_train(): # returns x, y (where y represents label's class index).
features = {'col1': tf.SparseTensor(indices=[[0, 1], [0, 5], [0, 7], [0, 9]],
values=[1, 2, 1, 3],
dense_shape=[3, int(250e6)]),
'col2': tf.SparseTensor(indices=[[0, 2], [0, 3]],
values=[4, 5],
dense_shape=[3, int(100e6)]),
'price': tf.constant([5.2, 0, 0])}
labels = tf.constant([0, 1, 1])
return features, labels
estimator.fit(input_fn=input_fn_train, steps=100)
Aber ich habe eine Frage von diesem Satz
sparse_feature_a = tf.contrib.layers.sparse_column_with_hash_bucket('col1', 3, dtype=tf.int32)
wo 3 bedeutet hash_bucket_size = 3, aber dieser spärliche Tensor enthält 4 von Null verschiedene Werte,
'col1': tf.SparseTensor(indices=[[0, 1], [0, 5], [0, 7], [0, 9]],
values=[1, 2, 1, 3],
dense_shape=[3, int(250e6)])
Es scheint has_bucket_size tut nichts hier. Ganz gleich, wie viele Werte ungleich Null Sie in Ihrem dünnen Tensor haben, Sie müssen ihn nur mit einer Ganzzahl> 1 setzen, und er funktioniert ordnungsgemäß.
Ich weiß, dass mein Verständnis möglicherweise nicht richtig ist. Könnte jemand erklären, wie has_bucket_size funktioniert? Danke vielmals!
Danke! Jetzt denke ich, wenn man eine Zahl erraten kann, die den gesamten Bereich der realen Daten abdeckt, dann ist es perfekt. Wenn Sie eine Zahl kleiner als erwartet erraten, wird es auch funktionieren, aber kann unsicheres Verhalten verursachen. –