iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python人工智能tensorflow构建卷积神经网络CNN
  • 880
分享到

python人工智能tensorflow构建卷积神经网络CNN

2024-04-02 19:04:59 880人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录简介隐含层介绍1、卷积层2、池化层3、全连接层具体实现代码卷积层、池化层与全连接层实现代码全部代码学习神经网络已经有一段时间,从普通的BP神经网络到LSTM长短期记忆网络都有一定

学习神经网络已经有一段时间,从普通的BP神经网络到LSTM长短期记忆网络都有一定的了解,但是从未系统的把整个神经网络的结构记录下来,我相信这些小记录可以帮助我更加深刻的理解神经网络。

简介

卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一。

其主要结构分为输入层、隐含层、输出层。

在tensorboard中,其结构如图所示:

对于卷积神经网络而言,其输入层、输出层与平常的卷积神经网络无异。

但其隐含层可以分为三个部分,分别是卷积层(对输入数据进行特征提取)、池化层(特征选择和信息过滤)、全连接层(等价于传统前馈神经网络中的隐含层)。

隐含层介绍

1、卷积层

卷积将输入图像放进一组卷积滤波器,每个滤波器激活图像中的某些特征。

假设一副黑白图像为5*5的大小,像这样:

利用如下卷积器进行卷积:

卷积结果为:

卷积过程可以提取特征,卷积神经网络是根据特征来完成分类的。

Tensorflow中,卷积层的重要函数是:

tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None)

其中:

1、input是输入量,shape是[batch, height, width, channels]。;

2、filter是使用的卷积核;

3、strides是步长,其格式[1,step,step,1],step指的是在图像卷积的每一维的步长;

4、padding:string类型的量,只能是"SAME","VALID"其中之一,SAME表示卷积前后图像面积不变。

2、池化层

池化层用于在卷积层进行特征提取后,输出的特征图会被传递至池化层进行特征选择和信息过滤。

常见的池化是最大池化,最大池化指的是取出这些被卷积后的数据的最大值,就是取出其最大特征。

假设其池化窗口为2X2,步长为2。

原图像为:

池化后为:

在tensorflow中,池化层的重要函数是:

tf.nn.max_pool(value, ksize, strides, padding, data_fORMat, name)

1、value:池化层的输入,一般池化层接在卷积层后面,shape是[batch, height, width, channels]。

2、ksize:池化窗口的大小,取一个四维向量,一般是[1, in_height, in_width, 1]。

3、strides:和卷积类似,窗口在每一个维度上滑动的步长,也是[1, stride,stride, 1]。

4、padding:和卷积类似,可以取’VALID’ 或者’SAME’。

这是tensorboard中卷积层和池化层的连接结构:

3、全连接层

全连接层与普通神经网络的结构相同,如图所示:

具体实现代码

卷积层、池化层与全连接层实现代码

def conv2d(x,W,step,pad): #用于进行卷积,x为输入值,w为卷积核
    return tf.nn.conv2d(x,W,strides = [1,step,step,1],padding = pad)
def max_pool_2X2(x,step,pad):	#用于池化,x为输入值,step为步数
    return tf.nn.max_pool(x,ksize = [1,2,2,1],strides= [1,step,step,1],padding = pad)
def weight_variable(shape):		#用于获得W
    initial = tf.truncated_normal(shape,stddev = 0.1) #从截断的正态分布中输出随机值
    return tf.Variable(initial)
def bias_variable(shape):		#获得bias
    initial = tf.constant(0.1,shape=shape)  #生成普通值
    return tf.Variable(initial)
def add_layer(inputs,in_size,out_size,n_layer,activation_function = None,keep_prob = 1):	
#用于添加全连接层
    layer_name = 'layer_%s'%n_layer
    with tf.name_scope(layer_name):
        with tf.name_scope("Weights"):
            Weights = tf.Variable(tf.truncated_normal([in_size,out_size],stddev = 0.1),name = "Weights")
            tf.summary.histogram(layer_name+"/weights",Weights)
        with tf.name_scope("biases"):
            biases = tf.Variable(tf.zeros([1,out_size]) + 0.1,name = "biases")
            tf.summary.histogram(layer_name+"/biases",biases)
        with tf.name_scope("Wx_plus_b"):
            Wx_plus_b = tf.matmul(inputs,Weights) + biases
            tf.summary.histogram(layer_name+"/Wx_plus_b",Wx_plus_b)
        if activation_function == None :
            outputs = Wx_plus_b 
        else:
            outputs = activation_function(Wx_plus_b)
        print(activation_function)
        outputs = tf.nn.dropout(outputs,keep_prob)
        tf.summary.histogram(layer_name+"/outputs",outputs)
        return outputs
def add_cnn_layer(inputs, in_z_dim, out_z_dim, n_layer, conv_step = 1, pool_step = 2, padding = "SAME"):
#用于生成卷积层和池化层
    layer_name = 'layer_%s'%n_layer
    with tf.name_scope(layer_name):
        with tf.name_scope("Weights"):
            W_conv = weight_variable([5,5,in_z_dim,out_z_dim])
        with tf.name_scope("biases"):
            b_conv = bias_variable([out_z_dim])
        with tf.name_scope("conv"):
        #卷积层
            h_conv = tf.nn.relu(conv2d(inputs, W_conv, conv_step, padding)+b_conv) 
        with tf.name_scope("pooling"):
        #池化层
            h_pool = max_pool_2X2(h_conv, pool_step, padding)
    return h_pool

全部代码

import tensorflow as tf 
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data",one_hot = "true")
def conv2d(x,W,step,pad):
    return tf.nn.conv2d(x,W,strides = [1,step,step,1],padding = pad)
def max_pool_2X2(x,step,pad):
    return tf.nn.max_pool(x,ksize = [1,2,2,1],strides= [1,step,step,1],padding = pad)
def weight_variable(shape):
    initial = tf.truncated_normal(shape,stddev = 0.1) #从截断的正态分布中输出随机值
    return tf.Variable(initial)
def bias_variable(shape):
    initial = tf.constant(0.1,shape=shape)  #生成普通值
    return tf.Variable(initial)
def add_layer(inputs,in_size,out_size,n_layer,activation_function = None,keep_prob = 1):
    layer_name = 'layer_%s'%n_layer
    with tf.name_scope(layer_name):
        with tf.name_scope("Weights"):
            Weights = tf.Variable(tf.truncated_normal([in_size,out_size],stddev = 0.1),name = "Weights")
            tf.summary.histogram(layer_name+"/weights",Weights)
        with tf.name_scope("biases"):
            biases = tf.Variable(tf.zeros([1,out_size]) + 0.1,name = "biases")
            tf.summary.histogram(layer_name+"/biases",biases)
        with tf.name_scope("Wx_plus_b"):
            Wx_plus_b = tf.matmul(inputs,Weights) + biases
            tf.summary.histogram(layer_name+"/Wx_plus_b",Wx_plus_b)
        if activation_function == None :
            outputs = Wx_plus_b 
        else:
            outputs = activation_function(Wx_plus_b)
        print(activation_function)
        outputs = tf.nn.dropout(outputs,keep_prob)
        tf.summary.histogram(layer_name+"/outputs",outputs)
        return outputs
def add_cnn_layer(inputs, in_z_dim, out_z_dim, n_layer, conv_step = 1, pool_step = 2, padding = "SAME"):
    layer_name = 'layer_%s'%n_layer
    with tf.name_scope(layer_name):
        with tf.name_scope("Weights"):
            W_conv = weight_variable([5,5,in_z_dim,out_z_dim])
        with tf.name_scope("biases"):
            b_conv = bias_variable([out_z_dim])
        with tf.name_scope("conv"):
            h_conv = tf.nn.relu(conv2d(inputs, W_conv, conv_step, padding)+b_conv) 
        with tf.name_scope("pooling"):
            h_pool = max_pool_2X2(h_conv, pool_step, padding)
    return h_pool
def compute_accuracy(x_data,y_data):
    global prediction
    y_pre = sess.run(prediction,feed_dict={xs:x_data,keep_prob:1})
    correct_prediction = tf.equal(tf.arg_max(y_data,1),tf.arg_max(y_pre,1))
    accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))
    result = sess.run(accuracy,feed_dict = {xs:batch_xs,ys:batch_ys,keep_prob:1})
    return result
keep_prob = tf.placeholder(tf.float32)
xs = tf.placeholder(tf.float32,[None,784])
ys = tf.placeholder(tf.float32,[None,10])
x_image = tf.reshape(xs,[-1,28,28,1])
h_pool1 = add_cnn_layer(x_image, in_z_dim = 1, out_z_dim = 32, n_layer = "cnn1",)
h_pool2 = add_cnn_layer(h_pool1, in_z_dim = 32, out_z_dim = 64, n_layer = "cnn2",)
h_pool2_flat = tf.reshape(h_pool2,[-1,7*7*64])
h_fc1_drop = add_layer(h_pool2_flat, 7*7*64, 1024, "layer1", activation_function = tf.nn.relu, keep_prob = keep_prob)
prediction = add_layer(h_fc1_drop, 1024, 10, "layer2", activation_function = tf.nn.softmax, keep_prob = 1)
with tf.name_scope("loss"):
    loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=ys,logits = prediction),name = 'loss')
    tf.summary.Scalar("loss",loss)
train = tf.train.AdamOptimizer(1e-4).minimize(loss)
init = tf.initialize_all_variables()
merged = tf.summary.merge_all()
with tf.Session() as sess:
    sess.run(init)
    write = tf.summary.FileWriter("logs/",sess.graph)
    for i in range(5000):
        batch_xs,batch_ys = mnist.train.next_batch(100)
        sess.run(train,feed_dict = {xs:batch_xs,ys:batch_ys,keep_prob:0.5})
        if i % 100 == 0:
            print(compute_accuracy(mnist.test.images,mnist.test.labels))

以上就是python人工智能tensorflow构建卷积神经网络CNN的详细内容,更多关于tensorflow构建卷积神经网络CNN的资料请关注编程网其它相关文章!

--结束END--

本文标题: python人工智能tensorflow构建卷积神经网络CNN

本文链接: https://www.lsjlt.com/news/117639.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python人工智能tensorflow构建卷积神经网络CNN
    目录简介隐含层介绍1、卷积层2、池化层3、全连接层具体实现代码卷积层、池化层与全连接层实现代码全部代码学习神经网络已经有一段时间,从普通的BP神经网络到LSTM长短期记忆网络都有一定...
    99+
    2024-04-02
  • python人工智能tensorflow构建循环神经网络RNN
    目录学习前言RNN简介tensorflow中RNN的相关函数tf.nn.rnn_cell.BasicLSTMCelltf.nn.dynamic_rnn全部代码学习前言 在前一段时间已...
    99+
    2024-04-02
  • python人工智能tensorflow怎么构建循环神经网络RNN
    本篇内容介绍了“python人工智能tensorflow怎么构建循环神经网络RNN”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!RNN简介R...
    99+
    2023-06-30
  • Python神经网络TensorFlow基于CNN卷积识别手写数字
    目录基础理论一、训练CNN卷积神经网络1、载入数据2、改变数据维度3、归一化4、独热编码5、搭建CNN卷积神经网络5-1、第一层:第一个卷积层5-2、第二层:第二个卷积层5-3、扁平...
    99+
    2024-04-02
  • 如何用tensorflow搭建卷积神经网络
    要用TensorFlow搭建卷积神经网络(CNN),首先需要导入TensorFlow库并定义网络的结构。以下是一个简单的示例代码,展...
    99+
    2024-04-03
    tensorflow
  • 一文带你了解CNN(卷积神经网络)
    目录前言一、CNN解决了什么问题?二、CNN网络的结构2.1 卷积层 - 提取特征卷积运算权重共享稀疏连接总结:标准的卷积操作卷积的意义1x1卷积的重大意义2.2 激活函数2.3 池...
    99+
    2024-04-02
  • tensorflow卷积神经Inception V3网络结构代码解析
    目录前言1 非Inception Module的普通卷积层2 三个Inception模块组3 Auxiliary Logits、全局平均池化、Softmax分类前言 学习了Incep...
    99+
    2024-04-02
  • 怎么用TensorFlow实现卷积神经网络
    这篇文章主要介绍“怎么用TensorFlow实现卷积神经网络”,在日常操作中,相信很多人在怎么用TensorFlow实现卷积神经网络问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用TensorFlow实现...
    99+
    2023-06-25
  • python神经网络Keras构建CNN网络训练
    目录Keras中构建CNN的重要函数1、Conv2D2、MaxPooling2D3、Flatten全部代码利用Keras构建完普通BP神经网络后,还要会构建CNN Keras中构建C...
    99+
    2024-04-02
  • python:使用卷积神经网络(CNN)进行回归预测
    作者:CSDN @ _养乐多_ 本文详细记录了从Excel或者csv中读取用于训练卷积神经网络(CNN)模型的数据,包括多个自变量和1个因变量数据,以供卷积神经网络模型的训练。随后,我们将测试数据集应...
    99+
    2023-10-26
    python cnn 回归
  • 卷积神经网络Inception V3网络结构图
    目录1.基于大滤波器尺寸分解卷积1.1分解到更小的卷积1.2. 空间分解为不对称卷积2. 利用辅助分类器3.降低特征图大小Inception-V3模型:总结:《Rethinking ...
    99+
    2024-04-02
  • Python CNN卷积神经网络实例讲解,CNN实战,CNN代码实例,超实用
    一、CNN简介 1. 神经网络基础 输入层(Input layer),众多神经元(Neuron)接受大量非线形输入讯息。输入的讯息称为输入向量。 输出层(Output layer),讯息在神经元链接中传输、分析、权衡,形成输出结果。输出的...
    99+
    2023-08-31
    深度学习 人工智能 cnn 卷积神经网络
  • pytorch如何搭建卷积神经网络
    在PyTorch中搭建卷积神经网络通常涉及以下步骤: 导入必要的库和模块: import torch import torch....
    99+
    2024-04-08
    pytorch
  • TensorFlow卷积神经网络AlexNet实现示例详解
    2012年,Hinton的学生Alex Krizhevsky提出了深度卷积神经网络模型AlexNet,它可以算是LeNet的一种更深更宽的版本。AlexNet以显著的优势赢得了竞争激...
    99+
    2024-04-02
  • keras怎么搭建卷积神经网络
    在Keras中搭建卷积神经网络(CNN)可以通过Sequential模型或Functional API来实现。下面分别介绍这两种方法...
    99+
    2024-04-02
  • pytorch怎么搭建卷积神经网络
    在PyTorch中搭建卷积神经网络(Convolutional Neural Network,CNN)通常需要使用torch.nn模...
    99+
    2024-04-02
  • TensorFlow中的卷积神经网络是如何实现的
    在TensorFlow中,卷积神经网络(CNN)的实现通常涉及以下步骤: 定义输入数据:首先,需要定义CNN的输入数据,通常是一...
    99+
    2024-03-01
    TensorFlow
  • TensorFlow卷积神经网络MNIST数据集实现示例
    这里使用TensorFlow实现一个简单的卷积神经网络,使用的是MNIST数据集。网络结构为:数据输入层–卷积层1–池化层1–卷积层2–池化层2–全连接层1–全连接层2(输出层),这...
    99+
    2024-04-02
  • 深度学习—卷积神经网络(CNN)全笔记,附代码
     本文内容为哔站学习笔记【卷积神经网络-CNN】深度学习(唐宇迪带你学AI):卷积神经网络理论详解与项目实战,计算机视觉,图像识别模块实战_哔哩哔哩_bilibili 目录 深度学习基础 什么是深度学习? 机器学习流程  特征工程的作...
    99+
    2023-10-23
    神经网络 深度学习 cnn python 图像处理
  • python人工智能算法之人工神经网络怎么使用
    本篇内容介绍了“python人工智能算法之人工神经网络怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!人工神经网络(Artificia...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作