为什么我需要在TensorFlow中输入数据的字典数据类型

时间:2018-11-01 14:04:37

标签: python tensorflow machine-learning deep-learning

(X_train, y_train), (X_test, y_test) = tf.keras.datasets.mnist.load_data()
X_train = X_train.astype(np.float32).reshape(-1, 28*28) / 255.0
X_test = X_test.astype(np.float32).reshape(-1, 28*28) / 255.0
y_train = y_train.astype(np.int32)
y_test = y_test.astype(np.int32)
X_valid, X_train = X_train[:5000], X_train[5000:]
y_valid, y_train = y_train[:5000], y_train[5000:]

dnn_clf = tf.estimator.DNNClassifier(hidden_units=[300,100], n_classes=10,
feature_columns=feature_cols)

input_fn = tf.estimator.inputs.numpy_input_fn(
x={"X": X_train}, y=y_train, num_epochs=40, batch_size=50, shuffle=True)

dnn_clf.train(input_fn=input_fn)

我的问题是: 之间有什么区别

x={"X": X_train}, y=y_train, num_epochs=40, batch_size=50, shuffle=True)

x=X_train, y=y_train, num_epochs=40, batch_size=50, shuffle=True)

为什么我不能仅使用列表 X_train作为输入x,而必须将X_train转换为词典 x={"X": X_train}

为什么我不需要为y做同样的事情?

1 个答案:

答案 0 :(得分:0)

根据numpy_input_fn的TensorFlow 1.11文档,您可以使用两种方法。但是我已经在TensorFlow 1.9上对其进行了测试,但是它没有用。因此,似乎此功能是在以后添加的。

据我了解,另一个问题是“为什么x参数是一个映射而y只是一个数组”。问题是模型可以具有多个输入要素列/张量,但输出张量只能是一个。至少对于标准估计器和一般用例而言,这是正确的。因此,您需要以某种方式指定多个输入,而最简单的方法就是传递地图。