Vivado HLS实现MNIST手写数字识别(1)

本文介绍了如何在TensorFlow中设计卷积神经网络并应用到MNIST手写数字识别,随后详细描述了如何将该网络转化为HLS硬件模块并在XilinxZYNQ平台上的Vivado工具进行设计和验证,包括使用VitisSDK进行软件开发和硬件协同工作。

在设计完HLS卷积和池化硬件模块后,这里通过最基础的MNIST手写数字识别案例将两个模块运用起来。

一、TensorFlow设计卷积神经网络

        卷积神经网络在图像处理领域有着很大的优势,本案例通过设计包含两个卷积池化层和两个全连接层的神经网络对MNIST手写数字进行训练识别,最后识别的准确率保持在99%。

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
import tensorflow as tf
import numpy as np
import struct
#记录卷积神经网路的参数,分别存在.dat和.bin文件中(.bin最后放在sd卡中)
def Parameter_record(tensor,name):
    print("Recording "+name+"...")
    f = open('./record/'+name+".dat",'w')
    #wb指以二进制的方式写文件
    b = open('./record/'+name+".bin",'wb')
    #.eval(用来获取变量的返回值,和Session类似)
    array = tensor.eval()
    dimensions = np.size(np.shape(array))
    if(dimensions==1):
        Array1D_record(array,f,b)
    elif(dimensions==2):
        Array2D_record(array,f,b)
    elif(dimensions==3):
        Array3D_record(array,f,b)
    else:
        Array4D_record(array,f,b)

def Array1D_record(array,f,b):
    for i in range(np.shape(array)[0]):
        f.write(str(array[i])+"\n")
        #struct.pack将Python中的浮点类型转换为c语言中所使用的二进制数据类型
        b.write(struct.pack('f', array[i]))

def Array2D_record(array,f,b):
    for i in range(np.shape(array)[0]):
        for j in range(np.shape(array)[1]):
            f.write(str(array[i][j])+"\n")
            b.write(struct.pack('f', array[i][j]))

def Array3D_record(array,f,b):
    for i in range(np.shape(array)[0]):
        for j in range(np.shape(array)[1]):
            for m in range(np.shape(array)[2]):
                f.write(str(array[i][j][m])+"\n")
                b.write(struct.pack('f', array[i][j][m]))

def Array4D_record(array,f,b):
    for i in range(np.shape(array)[0]):
        for j in range(np.shape(array)[1]):
            for m in range(np.shape(array)[2]):
                for n in range(np.shape(array)[3]):
                    f.write(str(array[i][j][m][n])+"\n")
                    b.write(struct.pack('f', array[i][j][m][n]))

#每个批次的大小
batch_size =50
#训练集一共有多少批次
n_batch = mnist.train.num_examples//batch_size

#初始化权值
def weight_variable(shape):
    # 正态分布,标准差为 0.1,默认最大为 1,最小为 -1,均值为 0
    return tf.Variable(tf.truncated_normal(shape,stddev=0.1))

#初始化偏置
def bias_variable(shape):
    return tf.Variable(tf.zeros(shape)+0.1)

#卷积层
def conv2d(x,W):
    #x input tensor of shape [batch,in_height,in_weight,in_channels]
    #W filte
评论 22
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值