学习笔记TF057:TensorFlow MNIST,卷积神经网络、循环神经网络、无监督学习

本篇博客探讨了使用 TensorFlow 在 MNIST 数据集上实现卷积神经网络(CNN)、循环神经网络(RNN)以及无监督学习的自编码器。详细介绍了模型构建、训练过程以及各模型的应用场景,同时提供了相关代码链接。
摘要由CSDN通过智能技术生成

MNIST 卷积神经网络。https://github.com/nlintz/TensorFlow-Tutorials/blob/master/05_convolutional_net.py
TensorFlow搭建卷积神经网络(CNN)模型,训练MNIST数据集。

构建模型。

定义输入数据,预处理数据。读取数据MNIST,得到训练集图片、标记矩阵,测试集图片标记矩阵。trX、trY、teX、teY 数据矩阵表现。trX、teX形状变为[-1,28,28,1],-1 不考虑输入图片数量,28x28 图片长、宽像素数,1 通道(channel)数量。MNIST 黑白图片,通道1。RGB彩色图像,通道3。
初始化权重,定义网络结构。卷积神经网络,3个卷积层、3个池化层、1个全连接层、1个输出层。
定义dropout占位符keep_conv,神经元保留比例。生成网络模型,得到预测值。
定义损失函数,tf.nn.softmax_cross_entropy_with_logits 比较预测值、真实值差异,做均值处理。
定义训练操作(train_op),RMSProp算法优化器tf.train.RMSPropOptimizer,学习率0.001,衰减值0.9,优化损失。
定义预测操作(predict_op)。
会话启动图,训练、评估。

#!/usr/bin/env python
import tensorflow as tf
import numpy as np
from tensorflow.examples.tutorials.mnist import input_data
batch_size = 128 # 训练批次大小
test_size = 256 # 评估批次大小
# 定义初始化权重函数
def init_weights(shape):
    return tf.Variable(tf.random_normal(shape, stddev=0.01))
# 定义神经网络模型函数
# 入参:X 输入数据,w 每层权重,p_keep_conv、p_keep_hidden dropout保留神经元比例
def model(X, w, w2, w3, w4, w_o, p_keep_conv, p_keep_hidden):
    # 第一组卷积层及池化层,dropout部分神经元
    l1a = tf.nn.relu(tf.nn.conv2d(X, w,                       # l1a shape=(?, 28, 28, 32)
                        strides=[1, 1, 1, 1], padding='SAME'))
    l1 = tf.nn.max_pool(l1a, ksize=[1, 2, 2, 1],              # l1 shape=(?, 14, 14, 32)
                        strides=[1, 2, 2, 1], padding='SAME')
    l1 = tf.nn.dropout(l1, p_keep_conv)
    # 第二组卷积层及池化层,dropout部分神经元
    l2a = tf.nn.relu(tf.nn.conv2d(l1, w2,                     # l2a shape=(?, 14, 14, 64)
                        strides=[1, 1, 1, 1], padding='SAME'))
    l2 = tf.nn.max_pool(l2a, ksize=[1, 2, 2, 1],              # l2 shape=(?, 7, 7, 64)
                        strides=[1, 2, 2, 1], padding='SAME')
    l2 = tf.nn.dropout(l2, p_keep_conv)
    # 第三组卷积层及池化层,dropout部分神经元
    l3a = tf.nn.relu(tf.nn.conv2d(l2, w3,                     # l3a shape=(?, 7, 7, 128)
                        strides=[1, 1, 1, 1], padding='SAME'))
    l3 = tf.nn.max_pool(l3a, ksize=[1, 2, 2, 1],              # l3 shape=(?, 4, 4, 128)
                        strides=[1, 2, 2, 1], padding='SAME')
    l3 = tf.reshape(l3, [-1, w4.get_shape().as_list()[0]])    # reshape to (?, 2048)
    l3 = tf.nn.dropout(l3, p_keep_conv)
    # 全连接层,dropout部分神经元
    l4 = tf.nn.relu(tf.matmul(l3, w4))
    l4 = tf.nn.dropout(l4, p_keep_hidden)
    # 输出层
    pyx = tf.matmul(l4, w_o)
    return pyx # 返回预测值
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
trX, trY, teX, teY = mnist.train.images, mnist.train.labels, mnist.test.images, mnist.test.labels
# 数据预处理
trX = trX.reshape(-1, 28, 28, 1)  # 28x28x1 input img
teX = teX.reshape(-1, 28, 28, 1)  # 28x28x1 input img
X = tf.placeholder("float", [None, 28, 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值