С x
- матрица данных Iris размером 120 x 4 (4 функции), а y
- метка, я могу сделать функцию ввода для tf.estimator
, как показано ниже
def input_function(x, y):
dict_x = {
"sepal_length" : x[:,0],
"sepal_width" : x[:,1],
"petal_length" : x[:,2],
"petal_width" : x[:,3]
}
dataset = tf.data.Dataset.from_tensor_slices((
dict_x, y
))
return dataset
затем определите столбец объектов, как показано ниже:
feature_columns = [
tf.feature_column.numeric_column(key="sepal_length"),
tf.feature_column.numeric_column(key="sepal_width"),
tf.feature_column.numeric_column(key="petal_length"),
tf.feature_column.numeric_column(key="petal_width")
]
Но я обнаружил в Интернете (я забыл, что источник все еще ищет), что я также могу определить функцию ввода, как показано ниже. Разница с предыдущим методом состоит в том, что все четыре функции теперь определены только с одним ключом, "x"
.
def input_function(x, y):
dict_x = {
"x" : x,
}
dataset = tf.data.Dataset.from_tensor_slices((
dict_x, y
))
return dataset
затем определите столбец объектов, как показано ниже:
feature_columns = [
tf.feature_column.numeric_column(key="x",shape=4),
]
Я запустил оба метода, и оба дают почти одинаковый результат. Мой вопрос : Я не могу найти документацию, которая объясняет разницу между обоими методами, потому что dict_x
имеет различную форму. Они все еще одинаково относятся к входному слою в нейронных сетях?
Я новичок в использовании tf.estimator
, Спасибо
Мой код оценки, если необходимо:
classifier = tf.estimator.DNNClassifier(
feature_columns=feature_columns,
hidden_units=[10],
n_classes=3,
optimizer=tf.train.GradientDescentOptimizer(0.001),
activation_fn=tf.nn.relu
)
# Train the model
classifier.train(
input_fn=lambda:input_function(xtrain, ytrain, True)
)