三层神经网络实现手写字母的识别(基于tensorflow)

数据集的制作参考这篇文章:

https://blog.csdn.net/fanzonghao/article/details/81229409

一,读取数据集

import tensorflow as tf
import numpy as np
import pickle
import matplotlib.pyplot as plt
#对于x变成(samles,pixs),y变成one_hot (samples,10)
"""
one-hot
"""
def reformat(dataset,labels,imgsize,C):dataset=dataset.reshape(-1,imgsize*imgsize).astype(np.float32)#one_hot两种写法#写法一labels=np.eye(C)[labels.reshape(-1)].astype(np.float32)#写法二#labels=(np.arange(10)==labels[:,None]).astype(np.float32)return dataset,labels
"""
读取.pickle文件
"""
def pickle_dataset():path='./data/notMNIST.pickle'with open(path,'rb') as f:restore=pickle.load(f)train_dataset=restore['train_dataset']train_label = restore['train_label']valid_dataset = restore['valid_dataset']valid_label = restore['valid_label']test_dataset = restore['test_dataset']test_label = restore['test_label']del restore# print('Training:', train_dataset.shape, train_label.shape)# print('Validing:', valid_dataset.shape, valid_label.shape)# print('Testing:', test_dataset.shape, test_label.shape)train_dataset,train_label=reformat(train_dataset,train_label,imgsize=28,C=10)valid_dataset,valid_label=reformat(valid_dataset,valid_label,imgsize=28,C=10)test_dataset,test_label=reformat(test_dataset,test_label,imgsize=28,C=10)# print('after Training:', train_dataset.shape, train_label.shape)# print('after Validing:', valid_dataset.shape, valid_label.shape)# print('after Testing:', test_dataset.shape, test_label.shape)return train_dataset,train_label,valid_dataset,valid_label,test_dataset,test_label# #测试生成的数据正确不
# def test(train_dataset,train_label):
#     print(train_label[:10])
#     #plt.figure(figsize=(50,20))
#     for i in range(10):
#         plt.subplot(5,2,i+1)
#         plt.imshow(train_dataset[i].reshape(28,28))
#     plt.show()# if __name__ == '__main__':
#     test(train_dataset,train_label)二,三层神经网络代码
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import read_pickle_dataset
import math
#比较预测和真实精度
def accuracy(predictions,lables):acc=np.sum(np.argmax(predictions,1)==np.argmax(lables,1))/lables.shape[0]return acctrain_dataset,train_label,valid_dataset,valid_label,test_dataset,test_label=read_pickle_dataset.pickle_dataset()
print('Training:', train_dataset.shape, train_label.shape)
print('Validing:', valid_dataset.shape, valid_label.shape)
print('Testing:', test_dataset.shape, test_label.shape)
train_subset=10000
batch_size=128
#常量写法
# tf_train_dataset=tf.constant(train_dataset[:train_subset,:])
# tf_train_label=tf.constant(train_label[:train_subset,:])
tf_valid_dataset=tf.constant(valid_dataset)
#tf_valid_label=tf.constant(valid_label)
tf_test_dataset=tf.constant(test_dataset)
#tf_test_label=tf.constant(test_label)
#place_holder
"""
创建placeholder
"""
def creat_placeholder():X = tf.placeholder(dtype=tf.float32, shape=(None, 28 * 28))Y = tf.placeholder(dtype=tf.float32, shape=(None, 10))beta_regu=tf.placeholder(dtype=tf.float32)# tf_train_dataset=tf.placeholder(dtype=tf.float32,shape=(None,28*28))# tf_train_label=tf.placeholder(dtype=tf.float32,shape=(None,10))return X,Y,beta_regu
"""
初始化权重"""
def initialize_parameters():W1 = tf.Variable(initial_value=tf.truncated_normal(shape=(28 * 28, 1024),stddev=np.sqrt(2.0/(28*28))))b1=tf.Variable(initial_value=tf.zeros(1024))W2 = tf.Variable(initial_value=tf.truncated_normal(shape=(1024, 10)))b2 = tf.Variable(initial_value=tf.zeros(10))parameters={'W1':W1,'b1':b1,'W2':W2,'b2':b2}return parameters
"""
前向传播:三层网络
"""
def forward_propagation(X,parameters):W1 = parameters['W1']b1 = parameters['b1']W2 = parameters['W2']b2 = parameters['b2']Z=tf.add(tf.matmul(X,W1),b1)A=tf.nn.relu(Z)output=tf.add(tf.matmul(A,W2),b2)return output
"""
计算误差 含有正则项误差
"""
def compute_cost(beta,Y,Y_pred,parameter):
#计算lossloss=tf.reduce_mean(                              #(10000,10)      (10000,10)tf.nn.softmax_cross_entropy_with_logits_v2(labels=Y,logits=Y_pred))loss+=beta*(tf.nn.l2_loss(parameter['W1'])+tf.nn.l2_loss(parameter['W2']))return loss
"""
构建模型
"""
def model():beta_array=np.logspace(-4,-2,20)X,Y,beta_regu=creat_placeholder()parameters=initialize_parameters()Y_pred=forward_propagation(X, parameters)loss=compute_cost(beta_regu,Y, Y_pred,parameters)#学习率衰减  指数衰减#learning_rate=tf.train.exponential_decayoptimizer=tf.train.GradientDescentOptimizer(learning_rate=0.5).minimize(loss)# 预测train_prediction = tf.nn.softmax(Y_pred)valid_prediction = tf.nn.softmax(forward_propagation(tf_valid_dataset, parameters))test_prediction = tf.nn.softmax(forward_propagation(tf_test_dataset, parameters))init = tf.global_variables_initializer()for beta in beta_array:with tf.Session() as sess:sess.run(init)costs = []for step in range(3001):offset=(step*batch_size)%(train_label.shape[0]-batch_size)batch_data=train_dataset[offset:(offset+batch_size),:]batch_label=train_label[offset:(offset+batch_size),:]feed={X:batch_data,Y:batch_label,beta_regu:beta}_,train_predictions,cost=sess.run([optimizer,train_prediction,loss],feed_dict=feed)# if step%500==0:#     costs.append(cost)print('loss ={},at step {},beta={}'.format(cost,step,beta))# corect_prediction = tf.equal(tf.argmax(output, 1), tf.argmax(train_label, 1))# accuarcy = tf.reduce_mean(tf.cast(corect_prediction, 'float'))# feed = {tf_train_dataset: train_dataset, tf_train_label: train_label}# train_accuarcy = sess.run(accuarcy, feed_dict=feed)print('train accuracy={},beta={}'.format(accuracy(train_predictions,batch_label),beta))print('valid accuracy={},beta={}'.format(accuracy(valid_prediction.eval(),valid_label),beta))print('test accuracy={},beta={}'.format(accuracy(test_prediction.eval(), test_label),beta))# plt.plot(costs)# plt.ylabel('cost')# plt.xlabel('iterations ')# plt.show()if __name__ == '__main__':model()

打印结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493510.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(转)Kinect背景移除支持多人

原文:http://blogs.msdn.com/b/k4wdev/archive/2013/10/22/using-kinect-background-removal-with-multiple-users.aspx?utm_sourcetuicool Introduction: Background Removal in Kinect for Windows The 1.8 release of the Kinect for Windows Developer Toolkit…

德国汉堡科学院院士张建伟:信息物理系统驱动智能未来

来源:OFweek工控网随着第四次工业革命的到来,信息技术(IT)和运营技术(OT)的融合成为新趋势,工厂开始进入数字化转型阶段,而德国“工业4.0”战略给全球制造业发展带来启示&#xff0c…

两层卷积网络实现手写字母的识别(基于tensorflow)

可和这篇文章对比,https://blog.csdn.net/fanzonghao/article/details/81489049,数据集来源代码和链接一样。 import tensorflow as tf import numpy as np import matplotlib.pyplot as plt import read_pickle_datasettrain_dataset,train_label,vali…

焦李成教授谈深度神经网络发展历程

来源:西电人工智能学院摘要:焦李成教授谈深度神经网络发展历程2018年11月18日下午,计算机科学与技术学部主任、人工智能学院焦李成教授在成都参加了由中国人工智能学会主办的人工智能大讲堂并做特邀报告,焦李成教授在报告中回顾了…

KNN实现CIFAR-10数据集识别

cs231n链接:http://cs231n.github.io/linear-classify/, 训练集链接:https://download.csdn.net/download/fanzonghao/10592049 KNN缺点:每个测试样本都要循环一遍训练样本。 该数据集由5个data_batch和一个test_batch构成&…

近期苹果、Facebook等科技巨头股价缘何不断下跌?

来源:资本实验室近期,FAANG(Facebook、亚马逊、苹果、Netflix、谷歌)等科技巨头股价都出现了不同程度的下跌,而美国科技股整体的持续大跌,更是引发了全球股市振荡。其中,亚马逊在今年9月初达曾达到1万亿美元市值&#…

概率论基础知识各种分布

离散分布:伯努力分布,二项分布,possion分布 一,伯努力分布 #执硬币 x_arrnp.array([0,1]) #x为1的概率 p0.7 #0 1分布 #由PMF生成对应的概率 离散事件 pr_arrstats.bernoulli.pmf(x_arr,p) plt.plot(x_arr,pr_arr,markero,lines…

AI 芯片和传统芯片的区别

来源:内容来自「知乎汪鹏 」所谓的AI芯片,一般是指针对AI算法的ASIC(专用芯片)。传统的CPU、GPU都可以拿来执行AI算法,但是速度慢,性能低,无法实际商用。比如,自动驾驶需要识别道路行…

三层神经网络实现手写数字的识别(基于tensorflow)

数据集链接:https://download.csdn.net/download/fanzonghao/10598333 from tensorflow.examples.tutorials.mnist import input_data mnist input_data.read_data_sets("./mnist/", one_hotTrue)import tensorflow as tf# Parameters learning_rate 0…

鼠标终将消失,未来我们有哪些人机交互方式?

来源:资本实验室在人类发明史上,诞生了无数的英雄。他们的发明往往从一项前沿技术到家喻户晓、无处不在,但他们自己却又鲜为人知,美国发明家道格拉斯恩格尔巴特就是其中的代表。20世纪60年代,道格拉斯恩格尔巴特发明了…

两层卷积网络实现手写数字的识别(基于tensorflow)

可和这篇文章对比:https://blog.csdn.net/fanzonghao/article/details/81603367 # coding: utf-8 # ## MNIST数据集from __future__ import division, print_function, absolute_importimport tensorflow as tf# Import MNIST data,MNIST数据集导入 fro…

光波导总结资料

1、写出光波导中的麦克斯韦方程,并把光场分解为纵向分量与横向分量,求出混合模式HE与EH模式的横向电场强度与横向磁场强度的点积(用纵向分量表示)(需要有推导过程) 解:在线性、各向同性且时不变…

德国再出颠覆性发明,这次要安排我们的快递

来源:最黑科技摘要:如果用一句话来形容德国的工业设计,我能想到的就是:“母牛坐电锯——锯牛逼",小编已经不止一次把它吹得五光十色斗转星移~但你可能不知道,这个工业强国在2013年还提出了一个著名的发…

C++中用frugally-deep调用keras的模型并进行预测

1、背景 Python语言中的Keras库搭建深度学习模型非常便捷,但有时需要在 C 中调用训练好的模型,得到测试集的结果。比如将模型部署于FPGA,中间的一个步骤则需要用C构建模型。但 Keras库没有提供 C API,其中一种解决方法是使用 Ten…

简单的线性回归实现模型的存储和读取

和这篇文章对比https://blog.csdn.net/fanzonghao/article/details/81023730 不希望重复定义图上的运算,也就是在模型恢复过程中,不想sess.run(init)首先看路径 lineRegulation_model.py定义线性回归类: import tensorflow as tf "&qu…

MIT重新发明飞机:无需燃料,每秒万米喷射带你上天 | Nature封面

来源:量子位这不是科幻小说,离子引擎飞机真的被造出来了!“曲率引擎”、“离子引擎”等等激动人心的科幻名词,正在走进现实。最近MIT又重新发明了飞机,实验成果登上了《自然》杂志封面。这架飞机翼展5米,总…

unet实现区域分割

https://github.com/zonghaofan/pig-seg/tree/master/disk_segmentation 网络架构: # coding:utf-8 import tensorflow as tf import cv2 import numpy as np import matplotlib.pyplot as pltimg cv2.imread(./data/test.png)# cv2.imshow(1.jpg,img) # cv2.wait…

数字图像处理 实验一 图像的基本运算

实验一 图像的基本运算 一、实验目的 (1)掌握点运算和代数运算的算法实现和概念 (2)掌握和几何运算的算法实现和概念 (2)掌握灰度变换和几何变换的基本方法 (3)理解图像灰度直方图的…

2018世界人工智能蓝皮书:看中国到底有多强!【附下载】| 智东西内参

来源:智东西人工智能是引领未来的战略性高科技,作为新一轮产业变革的核心驱动力,催生新技术、新产品、新产业、新模式,引发经济结构重大变革,深刻改变人类生产生活方式和思维模式,实现社会生产力的整体跃升…

tensorflow(GPU)使用

一,直接指定GPU: tf.ConfigProto一般用在创建session的时候。用来对session进行参数配置 with tf.Session(config tf.ConfigProto(...),...) #tf.ConfigProto()的参数 log_device_placementTrue : 是否打印设备分配日志 allow_soft_placementTrue : 如…