我正在尝试使用自定义估算器为MNIST数据集实现网络。这是我的输入功能:
def input_train_fn(): train,test = tf.keras.datasets.mnist.load_data() mnist_x,mnist_y = …
首先,您需要生产批次。有关详细信息,请参阅 https://www.tensorflow.org/guide/datasets
... dataset = tf.data.Dataset.from_tensor_slices((features, labels)) dataset = dataset.batch(size) return dataset
然后重塑你的形象并投射到 float 。 -1表示batch_size,它将在训练期间被替换。根据提供的数据类型,将float标记为float是可选的。
float
net = tf.cast(tf.reshape(features, [-1, 28*28]), tf.float32) labels = tf.cast(labels, tf.int64) net = tf.layers.dense(net, 10, tf.nn.relu) legits = tf.layers.dense(net, 10, activation=None) predicted_classes = tf.arg_max(legits, 1) if mode == tf.estimator.ModeKeys.PREDICT: predictions = { 'class_ids': predicted_classes, 'probabilities': tf.nn.softmax(legits), 'logits': legits } return tf.estimator.EstimatorSpec(mode, predictions=predictions) loss = tf.losses.sparse_softmax_cross_entropy(labels=labels, logits=legits) if mode == tf.estimator.ModeKeys.EVAL: return tf.estimator.EstimatorSpec(mode, loss=loss) optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.1) train_op = optimizer.minimize(loss, global_step=tf.train.get_global_step()) return tf.estimator.EstimatorSpec(mode, loss=loss, train_op=train_op) classifier = tf.estimator.Estimator(model_fn=my_model) classifier.train(input_fn=lambda: input_train_fn(), steps=10)