这里的话就不多说明了,因为上上一个博客已经说明了

import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('data/', one_hot=True) # 构造初始化参数, 方差为0.1
n_input = 784
n_output = 10
weights = {
'wc1' : tf.Variable(tf.truncated_normal([3, 3, 1, 64], stddev=0.1)),
'wc2' : tf.Variable(tf.truncated_normal([3, 3, 64, 128], stddev=0.1)),
'wd1' : tf.Variable(tf.truncated_normal([7*7*128, 1024], stddev=0.1)),
'wd2' : tf.Variable(tf.truncated_normal([1024, n_output], stddev=0.1)) } biases = {
'b1' : tf.Variable(tf.truncated_normal([64], stddev=0.1)),
'b2' : tf.Variable(tf.truncated_normal([128], stddev=0.1)),
'bd1' : tf.Variable(tf.truncated_normal([1024], stddev=0.1)),
'bd2' : tf.Variable(tf.truncated_normal([n_output], stddev=0.1)) } def conv_basic(_input, _w, _b, _keepratio): _input_r = tf.reshape(_input, shape=[-1, 28, 28, 1])
#进行卷积操作
_conv1 = tf.nn.conv2d(_input_r, _w['wc1'], strides=[1, 1, 1, 1], padding='SAME')
# 使用激活函数
_conv1 = tf.nn.relu(tf.nn.bias_add(_conv1, _b['bc1']))
# 进行池化操作, padding='SAME', 表示维度不足就补齐
_pool1 = tf.nn.max_pool(_conv1, ksize=[1, 2, 2, 1], stride=[1, 2, 2, 1], padding='SAME')
#去除一部分数据
_pool1_dr1 = tf.nn.dropout(_pool1, _keepratio)
#第二次卷积操作
_conv2 = tf.nn.conv2d(_pool1_dr1, _w['wc1'], strides=[1, 1, 1, 1], padding='SAME')
# 使用激活函数
_conv2 = tf.nn.relu(tf.nn.bias_add(_conv1, _b['bc1']))
# 进行池化操作
_pool2 = tf.nn.max_pool(_conv1, ksize=[1, 2, 2, 1], stride=[1, 2, 2, 1], padding='SAME')
_pool_dr2 = tf.nn.dropout(_pool1, _keepratio) # 第一次全连接操作
# 对_pool_dr2 根据wd1重新构造函数
_densel = tf.reshape(_pool_dr2, [-1, _w['wd1'].get_shape().as_list()[0]])
_fcl = tf.nn.relu(tf.add(tf.matmul(_densel, _w['wd1'], _b['bd1'])))
_fc_dr1 = tf.nn.dropout(_fcl, _keepratio)
# 第二次全连接
_out = tf.add(tf.matmul(_fc_dr1, _w['wd2']), _b['bd2'])
out = {'input_r': _input_r, 'conv1': _conv1, 'pool1': _pool1, 'pool1_dr1': _pool_dr1,
'conv2': _conv2, 'pool2': _pool2, 'pool_dr2': _pool_dr2, 'dense1': _dense1,
'fcl': _fcl, 'fc_dr1': _fc_dr1, 'out': _out
}
return out x = tf.placeholder(tf.float32, [None, n_input])
y = tf.placeholder(tf.float32, [None, n_output])
keepratio = tf.placeholder(tf.float32) # FUNCTIONS # 构造cost函数
#获得预测结果
_pred =conv_basic(x, weights, biases, keepratio)['out']
# 输入预测结果与真实值构造cost 函数
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(_pred, y))
# 优化函数使得cost最小
optm = tf.train.AdamOptimizer(learning_rate=0.001).minimize(cost)
# 计算准确率
_corr = tf.equal(tf.argmax(_pred, 1), tf.argmax(y, 1))
accr = tf.reduce_mean(tf.cast(_corr, tf.float32))
init = tf.global_variables_initializer() # 进行训练
sess = tf.Session()
sess.run(init)
save_step = 1
# 每次只保存3个值
saver = tf.train.Saver(max_to_keep=3)
#迭代次数
training_epochs = 15
# 每次训练的样本数
batch_size = 16
#循环打印的次数
display_step = 1
do_train = 1
if do_train == 1:
for epoch in range(training_epochs):
avg_cost = 0.
#total_batch = int(mnist.train.num_examples/batch_size)
total_batch = 10
# Loop over all batches
for i in range(total_batch):
# 提取训练数据和标签
batch_xs, batch_ys = mnist.train.next_batch(batch_size)
#训练模型优化参数
sess.run(optm, feed_dict={x: batch_xs, y: batch_ys, keepratio:0.7})
# 加和损失值
avg_cost += sess.run(cost, feed_dict={x: batch_xs, y: batch_ys, keepratio:1.})/total_batch # Display logs per epoch step
if epoch % display_step == 0:
print ("Epoch: %03d/%03d cost: %.9f" % (epoch, training_epochs, avg_cost))
train_acc = sess.run(accr, feed_dict={x: batch_xs, y: batch_ys, keepratio:1.})
print (" Training accuracy: %.3f" % (train_acc))
#test_acc = sess.run(accr, feed_dict={x: testimg, y: testlabel, keepratio:1.})
#print (" Test accuracy: %.3f" % (test_acc))
if epoch % save_step == 0:
saver.save(sess, "save/nets/cnn_mnist_basic.ckpt-" + str(epoch))
print ("OPTIMIZATION FINISHED") if do_train == 0:
epoch = training_epochs - 1
saver.restore(sess, "save/nets/cnn_mnist_basic.ckpt-" + str(epoch))
# 对测试集进行测试
feed_test = {x: mnist.test.images, y: mnist.test.labels, keepratio:1.}
test_acc = sess.run(accr, feed_dict=feed_test)
print(test_acc)

跟我学算法-tensorflow 实现卷积神经网络附带保存和读取的更多相关文章

  1. 跟我学算法-tensorflow 实现卷积神经网络

    我们采用的卷积神经网络是两层卷积层,两层池化层和两层全连接层 我们使用的数据是mnist数据,数据训练集的数据是50000*28*28*1 因为是黑白照片,所以通道数是1 第一次卷积采用64个filt ...

  2. TensorFlow实现卷积神经网络

    1 卷积神经网络简介 在介绍卷积神经网络(CNN)之前,我们需要了解全连接神经网络与卷积神经网络的区别,下面先看一下两者的结构,如下所示: 图1 全连接神经网络与卷积神经网络结构 虽然上图中显示的全连 ...

  3. 使用TensorFlow的卷积神经网络识别自己的单个手写数字,填坑总结

    折腾了几天,爬了大大小小若干的坑,特记录如下.代码在最后面. 环境: Python3.6.4 + TensorFlow 1.5.1 + Win7 64位 + I5 3570 CPU 方法: 先用MNI ...

  4. tensorflow CNN 卷积神经网络中的卷积层和池化层的代码和效果图

    tensorflow CNN 卷积神经网络中的卷积层和池化层的代码和效果图 因为很多 demo 都比较复杂,专门抽出这两个函数,写的 demo. 更多教程:http://www.tensorflown ...

  5. Python之TensorFlow的卷积神经网络-5

    一.卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度 ...

  6. 吴裕雄 python 神经网络——TensorFlow 使用卷积神经网络训练和预测MNIST手写数据集

    import tensorflow as tf import numpy as np from tensorflow.examples.tutorials.mnist import input_dat ...

  7. TensorFlow构建卷积神经网络/模型保存与加载/正则化

    TensorFlow 官方文档:https://www.tensorflow.org/api_guides/python/math_ops # Arithmetic Operators import ...

  8. Tensorflow之卷积神经网络(CNN)

    前馈神经网络的弊端 前一篇文章介绍过MNIST,是采用的前馈神经网络的结构,这种结构有一个很大的弊端,就是提供的样本必须面面俱到,否则就容易出现预测失败.如下图: 同样是在一个图片中找圆形,如果左边为 ...

  9. 字符型图片验证码,使用tensorflow实现卷积神经网络,进行验证码识别CNN

    本项目使用卷积神经网络识别字符型图片验证码,其基于 TensorFlow 框架.它封装了非常通用的校验.训练.验证.识别和调用 API,极大地减低了识别字符型验证码花费的时间和精力. 项目地址: ht ...

随机推荐

  1. c++运算符优先级表

    优先级 操作符 描述 例子 结合性 1 () [] -> . :: ++ -- 调节优先级的括号操作符 数组下标访问操作符 通过指向对象的指针访问成员的操作符 通过对象本身访问成员的操作符 作用 ...

  2. hook 学习

    一.hook 是什么? Hooks Overview 二.hook 的用法 三.hook 应用

  3. 【转】 linux的网络接口之扫盲

    [转] linux的网络接口之扫盲 转自:http://blog.csdn.net/zhangxinrun/article/details/6820433 (1)网络接口的命名 这里并不存在一定的命名 ...

  4. 知名第三方编译版tete009 Firefox 24.0

    Firefox除了官方版本上还有许多由爱好者自己编译修改的第三方版本. 其中 tete009 是十分流行的一个版本,目前tete009 Firefox 24.0 版本发布. tete009版Firef ...

  5. The record of Rf module debugging (1)

    In order to improve engineering English writing ability,start from today,record my daily work of  el ...

  6. bacnet ip转MQTT

    迈思德网关最新支持BACNET IP协议,可以将BACNET IP转换为MODBUS.MQTT.OPC等协议,与百度天工,阿里云等无缝对接. 支持AI.AO.DI.DO.AV.DV六个对象的读写.

  7. 让黑白的SecureCRT彩色起来

    让黑白的SecureCRT彩色起来,如图仿真设置如下:  

  8. springboot读取配置文件的顺序

    前言 今天测试一些东西,发现配置文件连接的数据库一直不正常,数据也不对,今天请教了之后,原来springboot的配置文件加载不仅仅是项目内的配置文件. 正文 项目目录是这样的:文件夹下有:项目,ap ...

  9. 常用PHP框架收集

    1.ThinkCMFX http://git.oschina.net/thinkcmf/ThinkCMFX 2.ThinkPHP http://www.thinkphp.cn/down.html 3. ...

  10. cratedb joins 原理(官方文档)

      JOINs are essential operations in relational databases. They create a link between rows based on c ...