我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么用TensorFlow实现卷积神经网络

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么用TensorFlow实现卷积神经网络

这篇文章主要介绍“怎么用TensorFlow实现卷积神经网络”,在日常操作中,相信很多人在怎么用TensorFlow实现卷积神经网络问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用TensorFlow实现卷积神经网络”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

import tensorflow as tfimport numpy as npimport input_datamnist = input_data.read_data_sets('data/', one_hot=True)print("MNIST ready")n_input  = 784 # 28*28的灰度图,像素个数784n_output = 10  # 是10分类问题# 权重项weights = {    # conv1,参数[3, 3, 1, 32]分别指定了filter的h、w、所连接输入的维度、filter的个数即产生特征图个数    'wc1': tf.Variable(tf.random_normal([3, 3, 1, 32], stddev=0.1)),       # conv2,这里参数3,3同上,32是当前连接的深度是32,即前面特征图的个数,64为输出的特征图的个数    'wc2': tf.Variable(tf.random_normal([3, 3, 32, 64], stddev=0.1)),     # fc1,将特征图转换为向量,1024由自己定义    'wd1': tf.Variable(tf.random_normal([7*7*64, 1024], stddev=0.1)),     # fc2,做10分类任务,前面连1024,输出10分类    'wd2': tf.Variable(tf.random_normal([1024, n_output], stddev=0.1)) }"""特征图大小计算:f_w = (w-f+2*pad)/s + 1 = (28-3+2*1)/1 + 1 = 28 # 说明经过卷积层并没有改变图片的大小f_h = (h-f+2*pad)/s + 1 = (28-3+2*1)/1 + 1 = 28# 特征图的大小是经过池化层后改变的第一次pooling后28*28变为14*14第二次pooling后14*14变为7*7,即最终是一个7*7*64的特征图"""# 偏置项biases = {    'bc1': tf.Variable(tf.random_normal([32], stddev=0.1)),      # conv1,对应32个特征图    'bc2': tf.Variable(tf.random_normal([64], stddev=0.1)),      # conv2,对应64个特征图    'bd1': tf.Variable(tf.random_normal([1024], stddev=0.1)),    # fc1,对应1024个向量    'bd2': tf.Variable(tf.random_normal([n_output], stddev=0.1)) # fc2,对应10个输出}def conv_basic(_input, _w, _b, _keep_prob):    # INPUT    # 对图像做预处理,转换为tf支持的格式,即[n, h, w, c],-1是确定好其它3维后,让tf去推断剩下的1维    _input_r = tf.reshape(_input, shape=[-1, 28, 28, 1])     # CONV LAYER 1    _conv1 = tf.nn.conv2d(_input_r, _w['wc1'], strides=[1, 1, 1, 1], padding='SAME')     # [1, 1, 1, 1]分别代表batch_size、h、w、c的stride    # padding有两种选择:'SAME'(窗口滑动时,像素不够会自动补0)或'VALID'(不够就跳过)两种选择    _conv1 = tf.nn.relu(tf.nn.bias_add(_conv1, _b['bc1'])) # 卷积层后连激活函数    # 最大值池化,[1, 2, 2, 1]其中1,1对应batch_size和channel,2,2对应2*2的池化    _pool1 = tf.nn.max_pool(_conv1, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')    # 随机杀死一些神经元,_keepratio为保留神经元比例,如0.6     _pool_dr1 = tf.nn.dropout(_pool1, _keep_prob)     # CONV LAYER 2    _conv2 = tf.nn.conv2d(_pool_dr1, _w['wc2'], strides=[1, 1, 1, 1], padding='SAME')    _conv2 = tf.nn.relu(tf.nn.bias_add(_conv2, _b['bc2']))    _pool2 = tf.nn.max_pool(_conv2, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')    _pool_dr2 = tf.nn.dropout(_pool2, _keep_prob) # dropout    # VECTORIZE向量化    # 定义全连接层的输入,把pool2的输出做一个reshape,变为向量的形式    _densel = tf.reshape(_pool_dr2, [-1, _w['wd1'].get_shape().as_list()[0]])     # FULLY CONNECTED LAYER 1    _fc1 = tf.nn.relu(tf.add(tf.matmul(_densel, _w['wd1']), _b['bd1'])) # w*x+b,再通过relu    _fc_dr1 = tf.nn.dropout(_fc1, _keep_prob) # dropout    # FULLY CONNECTED LAYER 2    _out = tf.add(tf.matmul(_fc_dr1, _w['wd2']), _b['bd2']) # w*x+b,得到结果    # RETURN    out = {'input_r': _input_r, 'conv1': _conv1, 'pool1': _pool1, 'pool_dr1': _pool_dr1,           'conv2': _conv2, 'pool2': _pool2, 'pool_dr2': _pool_dr2, 'densel': _densel,           'fc1': _fc1, 'fc_dr1': _fc_dr1, 'out': _out           }    return outprint("CNN READY")x = tf.placeholder(tf.float32, [None, n_input]) # 用placeholder先占地方,样本个数不确定为Noney = tf.placeholder(tf.float32, [None, n_output]) # 用placeholder先占地方,样本个数不确定为Nonekeep_prob = tf.placeholder(tf.float32)_pred = conv_basic(x, weights, biases, keep_prob)['out'] # 前向传播的预测值cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(_pred, y)) # 交叉熵损失函数optm = tf.train.AdamOptimizer(0.001).minimize(cost) # 梯度下降优化器_corr = tf.equal(tf.argmax(_pred, 1), tf.argmax(y, 1)) # 对比预测值索引和实际label索引,相同返回True,不同返回Falseaccr = tf.reduce_mean(tf.cast(_corr, tf.float32)) # 将True或False转换为1或0,并对所有的判断结果求均值init = tf.global_variables_initializer()print("FUNCTIONS READY")# 上面神经网络结构定义好之后,下面定义一些超参数training_epochs = 1000 # 所有样本迭代1000次batch_size = 100 # 每进行一次迭代选择100个样本display_step = 1# LAUNCH THE GRAPHsess = tf.Session() # 定义一个Sessionsess.run(init) # 在sess里run一下初始化操作# OPTIMIZEfor epoch in range(training_epochs):    avg_cost = 0.    total_batch = int(mnist.train.num_examples/batch_size)    for i in range(total_batch):        batch_xs, batch_ys = mnist.train.next_batch(batch_size) # 逐个batch的去取数据        sess.run(optm, feed_dict={x: batch_xs, y: batch_ys, keep_prob:0.5})        avg_cost += sess.run(cost, feed_dict={x: batch_xs, y: batch_ys, keep_prob:1.0})/total_batch    if epoch % display_step == 0:        train_accuracy = sess.run(accr, feed_dict={x: batch_xs, y: batch_ys, keep_prob: 1.0})        test_accuracy = sess.run(accr, feed_dict={x: mnist.test.images, y: mnist.test.labels, keep_prob:1.0})        print("Epoch: %03d/%03d cost: %.9f TRAIN ACCURACY: %.3f TEST ACCURACY: %.3f"              % (epoch, training_epochs, avg_cost, train_accuracy, test_accuracy))print("DONE")

我用的显卡是GTX960,在跑这个卷积神经网络的时候,第一次filter分别设的是64和128,结果报蜜汁错误了,反正就是我显存不足,所以改成了32和64,让特征图少一点。所以,是让我换1080的意思喽

I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\common_runtime\gpu\gpu_device.cc:885] Found device 0 with properties: name: GeForce GTX 960major: 5 minor: 2 memoryClockRate (GHz) 1.304pciBusID 0000:01:00.0Total memory: 4.00GiBFree memory: 3.33GiBI c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\common_runtime\gpu\gpu_device.cc:906] DMA: 0 I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\common_runtime\gpu\gpu_device.cc:916] 0:   Y I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\common_runtime\gpu\gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 960, pci bus id: 0000:01:00.0)W c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\common_runtime\bfc_allocator.cc:217] Ran out of memory trying to allocate 2.59GiB. The caller indicates that this is not a failure, but may mean that there could be performance gains if more memory is available.W c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\common_runtime\bfc_allocator.cc:217] Ran out of memory trying to allocate 1.34GiB. The caller indicates that this is not a failure, but may mean that there could be performance gains if more memory is available.W c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\common_runtime\bfc_allocator.cc:217] Ran out of memory trying to allocate 2.10GiB. The caller indicates that this is not a failure, but may mean that there could be performance gains if more memory is available.W c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\common_runtime\bfc_allocator.cc:217] Ran out of memory trying to allocate 3.90GiB. The caller indicates that this is not a failure, but may mean that there could be performance gains if more memory is available.Epoch: 000/1000 cost: 0.517761162 TRAIN ACCURACY: 0.970 TEST ACCURACY: 0.967Epoch: 001/1000 cost: 0.093012387 TRAIN ACCURACY: 0.960 TEST ACCURACY: 0.979...省略

到此,关于“怎么用TensorFlow实现卷积神经网络”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么用TensorFlow实现卷积神经网络

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

下载Word文档

猜你喜欢

怎么用TensorFlow实现卷积神经网络

这篇文章主要介绍“怎么用TensorFlow实现卷积神经网络”,在日常操作中,相信很多人在怎么用TensorFlow实现卷积神经网络问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用TensorFlow实现
2023-06-25

如何用tensorflow搭建卷积神经网络

要用TensorFlow搭建卷积神经网络(CNN),首先需要导入TensorFlow库并定义网络的结构。以下是一个简单的示例代码,展示了如何在TensorFlow中搭建一个包含两个卷积层和两个全连接层的CNN:import tensorf
如何用tensorflow搭建卷积神经网络
2024-04-03

TensorFlow中的卷积神经网络是如何实现的

在TensorFlow中,卷积神经网络(CNN)的实现通常涉及以下步骤:定义输入数据:首先,需要定义CNN的输入数据,通常是一个四维张量,形状为[batch_size, height, width, channels],其中batch_si
TensorFlow中的卷积神经网络是如何实现的
2024-03-01

PyTorch中的卷积神经网络怎么实现

在PyTorch中,可以使用torch.nn模块中的Conv2d类来实现卷积神经网络。以下是一个简单的示例,展示如何在PyTorch中实现一个简单的卷积神经网络:import torchimport torch.nn as nnclas
PyTorch中的卷积神经网络怎么实现
2024-03-05

TensorFlow卷积神经网络MNIST数据集实现方法是什么

本篇内容主要讲解“TensorFlow卷积神经网络MNIST数据集实现方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“TensorFlow卷积神经网络MNIST数据集实现方法是什么”吧!
2023-06-25

Python中如何实现卷积神经网络

这篇文章主要介绍了Python中如何实现卷积神经网络,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、卷积神经网络Yann LeCun 和Yoshua Bengio在1995
2023-06-15

卷积神经网络如何实现提取特征

这篇文章主要介绍了卷积神经网络如何实现提取特征问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-05-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录