使用tf.estimator.Estimator训练神经网络

参考: https://github.com/aymericdamien/TensorFlow-Examples/

from __future__ import print_function

from tensorflow.examples.tutorials.mnist import input_data

 

mnist=input_data.read_data_sets("/data/machine_learning/mnist/",one_hot=False)

print(mnist.train.labels.shape)

 

import tensorflow as tf

 

#参数设置

learning_rate=0.1 #学习率

num_steps=1000 #迭代次数

batch_size=128 #批处理大小

display_step=100 #输出间隔

 

#网络参数

n_hidden_1=256 #第一个隐藏层神经元

n_hidden_2=256 #第二个隐藏层神经元

num_input=784 #28*28

num_classes=10 #标签类别

 

#定义网络结构

def neural_net(x_dict):

    x=x_dict['images']

    layer_1=tf.layers.dense(x,n_hidden_1) #全连接层

    layer_2=tf.layers.dense(layer_1,n_hidden_2) #全连接层

    out_layer=tf.layers.dense(layer_2,num_classes) #全连接层,输出层

    return out_layer

 

def model_fn(features,labels,mode):

    logits=neural_net(features) #输出

   

    #预测

    pred_classes=tf.argmax(logits,axis=1)

    pred_probas=tf.nn.softmax(logits)

   

    if mode==tf.estimator.ModeKeys.PREDICT:

        return tf.estimator.EstimatorSpec(mode,predictions=pred_classes)

   

    #定义损失和优化函数

    loss_op=tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits,labels=tf.cast(labels,dtype=tf.int32)))

    optimizer=tf.train.GradientDescentOptimizer(learning_rate=learning_rate) #梯度下降优化器

    train_op=optimizer.minimize(loss_op,global_step=tf.train.get_global_step()) #最小化损失

   

    acc_op=tf.metrics.accuracy(labels=labels,predictions=pred_classes) #精度

   

    estim_specs=tf.estimator.EstimatorSpec(mode=mode,predictions=pred_classes,loss=loss_op,train_op=train_op,eval_metric_ops={'accuracy':acc_op})

    return estim_specs

 

 

model=tf.estimator.Estimator(model_fn)

 

input_fn=tf.estimator.inputs.numpy_input_fn(x={'images':mnist.train.images},y=mnist.train.labels,batch_size=batch_size,num_epochs=None,shuffle=True)

 

model.train(input_fn,steps=num_steps)

 

input_fn=tf.estimator.inputs.numpy_input_fn(x={'images':mnist.test.images},y=mnist.test.labels,batch_size=batch_size,shuffle=False)

 

e=model.evaluate(input_fn)

print("测试精度:",e['accuracy'])

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用TensorFlow实现卷积神经网络进行图像分类的代码示例: ```python import tensorflow as tf # 定义卷积神经网络模型 def cnn_model_fn(features, labels, mode): # 输入层 input_layer = tf.reshape(features["x"], [-1, 28, 28, 1]) # 卷积层1 conv1 = tf.layers.conv2d( inputs=input_layer, filters=32, kernel_size=[5, 5], padding="same", activation=tf.nn.relu) # 池化层1 pool1 = tf.layers.max_pooling2d(inputs=conv1, pool_size=[2, 2], strides=2) # 卷积层2 conv2 = tf.layers.conv2d( inputs=pool1, filters=64, kernel_size=[5, 5], padding="same", activation=tf.nn.relu) # 池化层2 pool2 = tf.layers.max_pooling2d(inputs=conv2, pool_size=[2, 2], strides=2) # 全连接层 pool2_flat = tf.reshape(pool2, [-1, 7 * 7 * 64]) dense = tf.layers.dense(inputs=pool2_flat, units=1024, activation=tf.nn.relu) dropout = tf.layers.dropout(inputs=dense, rate=0.4, training=mode == tf.estimator.ModeKeys.TRAIN) # 输出层 logits = tf.layers.dense(inputs=dropout, units=10) predictions = { "classes": tf.argmax(input=logits, axis=1), "probabilities": tf.nn.softmax(logits, name="softmax_tensor") } if mode == tf.estimator.ModeKeys.PREDICT: return tf.estimator.EstimatorSpec(mode=mode, predictions=predictions) # 计算损失函数 loss = tf.losses.sparse_softmax_cross_entropy(labels=labels, logits=logits) # 配置训练操作 if mode == tf.estimator.ModeKeys.TRAIN: optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.001) train_op = optimizer.minimize(loss=loss, global_step=tf.train.get_global_step()) return tf.estimator.EstimatorSpec(mode=mode, loss=loss, train_op=train_op) # 配置评估操作 eval_metric_ops = { "accuracy": tf.metrics.accuracy(labels=labels, predictions=predictions["classes"]) } return tf.estimator.EstimatorSpec(mode=mode, loss=loss, eval_metric_ops=eval_metric_ops) # 加载MNIST数据集 mnist = tf.contrib.learn.datasets.load_dataset("mnist") train_data = mnist.train.images train_labels = np.asarray(mnist.train.labels, dtype=np.int32) eval_data = mnist.test.images eval_labels = np.asarray(mnist.test.labels, dtype=np.int32) # 创建Estimator mnist_classifier = tf.estimator.Estimator(model_fn=cnn_model_fn, model_dir="/tmp/mnist_convnet_model") # 训练模型 train_input_fn = tf.estimator.inputs.numpy_input_fn( x={"x": train_data}, y=train_labels, batch_size=100, num_epochs=None, shuffle=True) mnist_classifier.train(input_fn=train_input_fn, steps=20000) # 评估模型 eval_input_fn = tf.estimator.inputs.numpy_input_fn( x={"x": eval_data}, y=eval_labels, num_epochs=1, shuffle=False) eval_results = mnist_classifier.evaluate(input_fn=eval_input_fn) print(eval_results) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值