博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于深度学习实现梯度下降算法
阅读量:6088 次
发布时间:2019-06-20

本文共 2761 字,大约阅读时间需要 9 分钟。

1 # -*- coding: utf-8 -*- 2 """ 3 Created on Mon Oct 22 17:23:49 2018 4  5 @author: zhen 6 """ 7 import tensorflow as tf 8 from tensorflow.examples.tutorials.mnist import input_data 9 import numpy as np10 from tensorflow.contrib.layers import fully_connected11 12 # 构建图阶段13 n_inputs = 28 * 2814 n_hidden1 = 30015 n_hidden2 = 10016 n_outputs = 1017 18 x = tf.placeholder(tf.float32, shape=(None, n_inputs), name='x')19 y = tf.placeholder(tf.int64, shape=(None), name='y')20 21 # 构建神经网络,基于两个隐藏层,激活函数:relu,Softmax22 def neuron_layer(x, n_neurons, name, activation=None):23     with tf.name_scope(name):24         # 取输入矩阵的维度作为层的输入连接个数25         n_inputs = int(x.get_shape()[1])26         stddev = 2 / np.sqrt(n_inputs)27         init = tf.truncated_normal((n_inputs, n_neurons), stddev=stddev)28         w = tf.Variable(init, name='weights')29         b = tf.Variable(tf.zeros([n_neurons]), name='biases')30         z = tf.matmul(x, w) + b31         if activation == 'relu':32             return tf.nn.relu(z)33         else:34             return z35 36 with tf.name_scope("dnn"):37     # 创建输入层到第一层隐藏层的映射38     hidden1 = neuron_layer(x, n_hidden1, "hidden1", activation="relu")39     # 创建第一层隐藏层到第二层隐藏层的映射40     hidden2 = neuron_layer(hidden1, n_hidden2, "hidden2", activation="relu")41     # 创建第二层隐藏层到输出层的映射42     logits = neuron_layer(hidden2, n_outputs, "outputs")43      44 with tf.name_scope("loss"):45     entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y, logits=logits)        46     loss = tf.reduce_mean(entropy, name="loss")47     48 learning_rate = 0.0149 50 with tf.name_scope("train"):51     optimizer = tf.train.GradientDescentOptimizer(learning_rate)52     training_op = optimizer.minimize(loss)53     54 with tf.name_scope("eval"):55     correct = tf.nn.in_top_k(logits, y, 1)56     accuracy = tf.reduce_mean(tf.cast(correct, tf.float32))57     58 init = tf.global_variables_initializer()59 saver = tf.train.Saver()60 61 # 计算图阶段62 mnist = input_data.read_data_sets("C:/Users/zhen/MNIST_data_bak/")63 n_epochs = 2064 batch_size = 5065 66 with tf.Session() as sess:67     init.run()68     for epoch in range(n_epochs):69         for iteration in range(mnist.train.num_examples // batch_size):70             x_batch, y_batch = mnist.train.next_batch(batch_size)71             sess.run(training_op, feed_dict={x:x_batch, y:y_batch})72         acc_train = accuracy.eval(feed_dict={x:x_batch, y:y_batch})73         acc_test = accuracy.eval(feed_dict={x:mnist.test.images, y:mnist.test.labels})74         print(epoch, "train accuracy:", acc_train, "test accuracy", acc_test)75     save_path = saver.save(sess, "./my_dnn_model_final.ckpt")76

结果:

  

分析:

  从结果可知:整体训练和测试准确率较高,前期波动较大,后期逐渐趋于稳定,收敛!

转载于:https://www.cnblogs.com/yszd/p/9843818.html

你可能感兴趣的文章
为什么我弃用GNOME转向KDE(2)
查看>>
Redis学习记录初篇
查看>>
爬虫案例若干-爬取CSDN博文,糗事百科段子以及淘宝的图片
查看>>
Web实时通信技术
查看>>
第三章 计算机及服务器硬件组成结合企业运维场景 总结
查看>>
IntelliJ IDEA解决Tomcal启动报错
查看>>
默认虚拟主机设置
查看>>
php中的短标签 太坑人了
查看>>
[译] 可维护的 ETL:使管道更容易支持和扩展的技巧
查看>>
### 继承 ###
查看>>
数组扩展方法之求和
查看>>
astah-professional-7_2_0安装
查看>>
函数是对象-有属性有方法
查看>>
uva 10107 - What is the Median?
查看>>
Linux下基本栈溢出攻击【转】
查看>>
c# 连等算式都在做什么
查看>>
使用c:forEach 控制5个换行
查看>>
java web轻量级开发面试教程摘录,java web面试技巧汇总,如何准备Spring MVC方面的面试...
查看>>
使用ansible工具部署ceph
查看>>
linux系列博文---->深入理解linux启动运行原理(一)
查看>>