Tensorflow2.0之Minist手写数字识别

大数据最新tensorflow2 minist手写数字识别数据训练 刚开始学习tensorflow, 首先接触的是minist手写数字识别,用的梯度下降算法,记录一下以备后续复习和供其他初学者参考,如有错误请不吝指正,万分感谢。将说明加在代码注释,方便查看复习。 阅读详情

Tensorflow2.0之Minist手写数字识别

注: 完整代码在最后

Minist数据集介绍

 Minist数据集是(Lecun, Bottou, Bengio, & Haffner, 1998)发布的,它包含了0~9 共10 种数字的手写图片,每种数字一共有7000 张图片,采集自不同书写风格的真实手写图片,一共70000 张图片。其中60000张图片作为训练集𝔻train^{train}train(Training Set),用来训练模型,剩下10000 张图片作为测试集𝔻test^{test}test(Test Set),用来预测或者测试,训练集和测试集共同组成了整个MNIST 数据集。

 考虑到手写数字图片包含的信息比较简单,每张图片均被缩放到28 × 28的大小,同时
只保留了灰度信息

 现在我们来看下图片的表示方法。一张图片包含了ℎ行(Height/Row),𝑤(Width/Column),每个位置保存了像素(Pixel)值,像素值一般使用0~255 的整形数值来表达颜色强度信息,例如0 表示强度最低,255 表示强度最高。如果是彩色图片,则每个像素点包含了R、G、B 三个通道的强度信息,分别代表红色通道、绿色通道、蓝色通道的颜色强度,所以与灰度图片不同,它的每个像素点使用一个1 维、长度为3 的向量(Vector)来表示,向量的3 个元素依次代表了当前像素点上面的R、G、B 颜色强值,因此彩色图片需要保存为形状是[ℎ, 𝑤, 3]的张量(Tensor,可以通俗地理解为3 维数组)。如果是灰度图片,则使用一个数值来表示灰度强度,例如0 表示纯黑,255 表示纯白,因此它只需要一个形状为[ℎ, 𝑤]的二维矩阵(Matrix)来表示一张图片信息(也可以保存为[ℎ, 𝑤, 1]形状的张量)。图 3.3 演示了内容为8 的数字图片的矩阵内容,可以看到,图片中黑色的像素用0 表示,灰度信息用0~255 表示,图片中灰度越白的像素点,对应矩阵位置中数值也就越大。

在这里插入图片描述

网络结构介绍

 本文中使用的简单的三层神经网络:
out=relu{ relu{ [X@W1+b1]@W2+b2} @W3+b3}  out=relu \{\ relu\{\ [X@W_1+b_1]@W_2+b_2\}\ @W_3+b_3 \}\ out=relu{ relu{ [X@W1​+b1​]@W2​+b2​} @W3​+b3​} 
 out 可以套上激活函数也可以不用套
 我们采用的数据集是MNIST 手写数字图片集,输入节点数为784,第一层的输出节点数是256,第二层的输出节点数是128,第三层的输出节点是10,也就是当前样本属于10 类别的概率。

代码部分

导入相应的包

from matplotlib import pyplot as mp
import tensorflow as tf
from tensorflow.keras import datasets, layers, optimizers

预处理函数

 从 keras.datasets 中加载的数据集的格式大部分情况都不能满足模型的输入要求,因此需要根据用户的逻辑自己实现预处理函数。Dataset 对象通过提供map(func)工具函数可以非常方便地调用用户自定义的预处理逻辑,它实现在func 函数里:

# 预处理函数实现在preprocess 函数中,传入函数引用即可
train_db = train_db.map(preprocess)

 考虑 MNIST 手写数字图片,从keras.datasets 中经.batch()后加载的图片x shape 为[𝑏, 28,28],像素使用0~255 的整形表示;标注shape 为[𝑏],即采样的数字编码方式。实际的神经网络输入,一般需要将图片数据标准化到[0,1]或[−1,1]等0 附近区间,同时根据网络的设置,需要将shape [28,28] 的输入Reshape 为合法的格式;对于标注信息,可以选择在预处理时进行one-hot 编码,也可以在计算误差时进行one-hot 编码。

 同时,我们将MNIST 图片数据映射到𝑥 ∈ [0,1]区间,视图调整为
[𝑏, 28 ∗ 28];对于标注y,我们选择在预处理函数里面进行one-hot 编码:

def preprocess(x, y): # 自定义的预处理函数
	# 调用此函数时会自动传入x,y 对象,shape 为[b, 28, 28], [b]
	# 标准化到0~1
	x = tf.cast(x, dtype=tf.float32) / 255.
	x = tf.reshape(x, [-1, 28*28]) # 打平
	y = tf.cast(y, dtype=tf.int32) # 转成整形张量
	y = tf.one_hot(y, depth=10) # one-hot 编码
	# 返回的x,y 将替换传入的x,y 参数,从而实现数据的预处理功能
	return x,y

加载手写数据集并进行数据处理

batchsz = 512
train_db = tf.data.Dataset.from_tensor_slices((x, y))  # 转化为Dataset对象
train_db = train_db.shuffle(1000)  # 随机打散
train_db = train_db.batch(batchsz)  # 批训练
train_db = train_db.map(preprocess)  # 数据预处理
train_db = train_db.repeat(20)  # 复制20份数据
test_db = tf.data.Dataset.from_tensor_slices((x_test, y_test))
test_db = test_db.shuffle(1000).batch(batchsz).map(preprocess)
x, y = next(iter(train_db))
print('train sample:', x.shape, y.shape)

 关于随机打散,批训练之类的内容在我的另一篇博客中有讲解:https://blog.youkuaiyun.com/python_LC_nohtyp/article/details/104106498

main() 函数部分

 在本次的网络中我们定义学习率lr=1e-2,并使用accs和losses两个列表来存储准确度和误差,方便之后绘图使用

设置网络层结构

网络的输入结点有784个,输出结点有10个

# 784 => 512
    w1, b1 = tf.Variable(tf.random.normal([784, 256], stddev=0.1)), tf.Variable(tf.zeros([256]))
    # 512 => 256
    w2, b2 = tf.Variable(tf.random.normal([256, 128], stddev=0.1)), tf.Variable(tf.zeros([128]))
    # 256 => 10
    w3, b3 = tf.Variable(tf.random.normal([128, 10], stddev=0.1)), tf.Variable(tf.zeros([10]))
循环更新

 现在我们进行循环更新,使用for循环去变量上述得到的train_db,并对w1,w2,w3,b1,b2,b3进行更新。

for step, (x, y) in enumerate(train_db):
	...

 下面说的都是for循环内的内容:

先我们将图片信息张量打平

x = tf.reshape(x, (-1, 784))

之后进行网络的搭建和误差的计算

with tf.GradientTape() as tape:
    # layer1.
    h1 = x @ w1 + b1
    h1 = tf.nn.relu(h1)
    # layer2
    h2 = h1 @ w2 + b2
    h2 = tf.nn.relu(h2)
    # output
    out = h2 @ w3 + b3
    # compute loss
    # [b, 10] - [b, 10]
    loss = tf.square(y - out)
    # [b, 10] => scalar
    loss = tf.reduce_mean(loss)

通过自动求导函数计算梯度(求偏导)并进行参数的更新

参数更新通过公式:
θ′=θ−η∗σLσθ \theta '= \theta - \eta *\frac{\sigma L}{\sigma \theta} θ′=θ−η∗σθσL​
进行更新

# 计算梯度
grads = tape.gradient(loss, [w1, b1, w2, b2, w3, b3])
# 参数更新
for p, g in zip([w1, b1, w2, b2, w3, b3], grads):
    p.assign_sub(lr * g)

 每当step可以被100整除的时候打印一下错误率,并将其添加到列表当中,同时还进行准确度的计算

# print
if step % 100 == 0:
    print(step, 'loss:', float(loss))
    losses.append(float(loss))
if step % 100 == 0:
    ...

接下来说一下第二个if里应该写什么

首先我们先定义两个变量用于计算准确度

total, total_correct = 0., 0

之后我们去迭代测试集获得准确度

 我们将测试集中的图片数据带入到目前的网络中进行对比,我们知道网络输出的是一个[b,10]结构的张量,b代表在每个数据集下的准确度,那么我们就选取最大的作为预测值
我们根据tf.argmax函数选出概率最大值出现的索引号,也即样本最有可能的类别号:
 pred = tf.argmax(out, axis=1)
由于我们的标注y 已经在预处理中完成了one-hot 编码,这在测试时其实是不需要的,因此通过tf.argmax 可以得到数字编码的标注y:
 y = tf.argmax(y, axis=1)
通过tf.equal 可以比较这2 者的结果是否相等:
 correct = tf.equal(pred, y)
并求和比较结果中所有True(转换为1)的数量,即为预测正确的数量:
total_correct += tf.reduce_sum(tf.cast(correct,dtype=tf.int32)).numpy()
通过预测的数量除以总测试数量即可得到准确度:
print(step, ‘Evaluate Acc:’, total_correct/total)

if step % 100 == 0:
    # evaluate/test
    total, total_correct = 0., 0
    # 计算准确度
    for x, y in test_db:
        # layer1.
        h1 = x @ w1 + b1
        h1 = tf.nn.relu(h1)
        # layer2
        h2 = h1 @ w2 + b2
        h2 = tf.nn.relu(h2)
        # output
        out = h2 @ w3 + b3
        # [b, 10] => [b]
        pred = tf.argmax(out, axis=1)
        # convert one_hot y to number y
        y = tf.argmax(y, axis=1)
        # bool type
        correct = tf.equal(pred, y)
        # bool tensor => int tensor => numpy
        total_correct += tf.reduce_sum(tf.cast(correct, dtype=tf.int32)).numpy()
        total += x.shape[0]
    print(step, 'Evaluate Acc:', total_correct / total)
    accs.append(total_correct / total)

 到这里循环更新的内容就写完了,
 通过简单的3 层神经网络,训练20 个Epoch 后,我们在测试集上获得了87.25%的准确率,如果使用复杂的神经网络模型,增加数据增强,精调网络超参数等技巧,可以获得更高的模型性能

生成svg图片文件

mp.figure()
x = [i * 80 for i in range(len(losses))]
mp.plot(x, losses, color='C0', marker='s', label='train')
mp.ylabel('MSE')
mp.xlabel('Step')
mp.legend()
mp.savefig('train.svg')
mp.figure()
mp.plot(x, accs, color='C1', marker='s', label='test')
mp.ylabel('Acc')
mp.xlabel('Step')
mp.legend()
mp.savefig('test.svg')

完整代码

from matplotlib import pyplot as mp
import tensorflow as tf
from tensorflow.keras import datasets, layers, optimizers


def preprocess(x, y):
    """
    预处理函数
    """
    # [b, 28, 28], [b]
    print(x.shape, y.shape)
    x = tf.cast(x, dtype=tf.float32) / 255.
    x = tf.reshape(x, [-1, 28 * 28])  # 将图片打平
    y = tf.cast(y, dtype=tf.int32)
    y = tf.one_hot(y, depth=10)
    return x, y


(x, y), (x_test, y_test) = datasets.mnist.load_data()  # 加载手写数据集数据
print('x:', x.shape, 'y:', y.shape, 'x test:', x_test.shape, 'y test:', y_test)

batchsz = 512
train_db = tf.data.Dataset.from_tensor_slices((x, y))  # 转化为Dataset对象
train_db = train_db.shuffle(1000)  # 随机打散
train_db = train_db.batch(batchsz)  # 批训练
train_db = train_db.map(preprocess)  # 数据预处理
train_db = train_db.repeat(20)  # 复制20份数据
test_db = tf.data.Dataset.from_tensor_slices((x_test, y_test))
test_db = test_db.shuffle(1000).batch(batchsz).map(preprocess)
x, y = next(iter(train_db))
print('train sample:', x.shape, y.shape)


def main():
    # learning rate
    lr = 1e-2
    accs, losses = [], []
    # 784 => 512
    w1, b1 = tf.Variable(tf.random.normal([784, 256], stddev=0.1)), tf.Variable(tf.zeros([256]))
    # 512 => 256
    w2, b2 = tf.Variable(tf.random.normal([256, 128], stddev=0.1)), tf.Variable(tf.zeros([128]))
    # 256 => 10
    w3, b3 = tf.Variable(tf.random.normal([128, 10], stddev=0.1)), tf.Variable(tf.zeros([10]))
    for step, (x, y) in enumerate(train_db):
        # [b, 28, 28] => [b, 784]
        x = tf.reshape(x, (-1, 784))
        with tf.GradientTape() as tape:
            # layer1.
            h1 = x @ w1 + b1
            h1 = tf.nn.relu(h1)
            # layer2
            h2 = h1 @ w2 + b2
            h2 = tf.nn.relu(h2)
            # output
            out = h2 @ w3 + b3
            # compute loss
            # [b, 10] - [b, 10]
            loss = tf.square(y - out)
            # [b, 10] => scalar
            loss = tf.reduce_mean(loss)
        # 计算梯度
        grads = tape.gradient(loss, [w1, b1, w2, b2, w3, b3])
        # 参数更新
        for p, g in zip([w1, b1, w2, b2, w3, b3], grads):
            p.assign_sub(lr * g)

        # print
        if step % 100 == 0:
            print(step, 'loss:', float(loss))
            losses.append(float(loss))

        if step % 100 == 0:
            # evaluate/test
            total, total_correct = 0., 0
            # 计算准确度
            for x, y in test_db:
                # layer1.
                h1 = x @ w1 + b1
                h1 = tf.nn.relu(h1)
                # layer2
                h2 = h1 @ w2 + b2
                h2 = tf.nn.relu(h2)
                # output
                out = h2 @ w3 + b3
                # [b, 10] => [b]
                pred = tf.argmax(out, axis=1)
                # convert one_hot y to number y
                y = tf.argmax(y, axis=1)
                # bool type
                correct = tf.equal(pred, y)
                # bool tensor => int tensor => numpy
                total_correct += tf.reduce_sum(tf.cast(correct, dtype=tf.int32)).numpy()
                total += x.shape[0]
            print(step, 'Evaluate Acc:', total_correct / total)
            accs.append(total_correct / total)

    mp.figure()
    x = [i * 80 for i in range(len(losses))]
    mp.plot(x, losses, color='C0', marker='s', label='train')
    mp.ylabel('MSE')
    mp.xlabel('Step')
    mp.legend()
    mp.savefig('train.svg')

    mp.figure()
    mp.plot(x, accs, color='C1', marker='s', label='test')
    mp.ylabel('Acc')
    mp.xlabel('Step')
    mp.legend()
    mp.savefig('test.svg')


if __name__ == '__main__':
    main()

【MLP实战】001:基于Minist数据集的手写数字识别 本文又是一篇基于Minist数据集的手写数字识别。 首先对文章代码进行分块介绍,然后给出运行过程和运行结果,再对调试过程中遇到的一些问题进行简要说明,最后粘贴全部代码。 一、代码分块介绍 导入库: import tensorflow as tf import matplotlib.pyplot as plt import numpy as np import os 第一个是深度学习框架的库 第二个是绘图库 第三个是数据分析库 第四个是操作系统功能接口库 获取Minist数据集 dat 阅读详情

相关推荐

Tensorflow之使用LeNet-5模型识别Minist手写体数字

一、Minist手写体数据集的特点 测试集minist_train '0’类:有将近6000张图, 二、LeNet-5卷积神经网络模型的基本原理 卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一。它仿造生...

qq_42617827的博客 1427

基于TensorFlow2的神经网络MNIST手写数字识别(多层感知机)

文章目录1 导包2 数据导入与处理3 创建模型(MLP多层感知器)4 定义优化器与损失函数5 编译模型与训练6 训练过程结果可视化7 预测示例 1 导包 import tensorflow as tf import matplotlib.pyplot as plt import numpy as np %matplotlib inline 2 数据导入与处理 # 数据导入,获取训练集和测试集 (train_image, train_labels), (test_image, test_labels) =

鹏啊鹏 2285

用tensorflow实现minist手写数字识别

代码: import pandas as pd import tensorflow as tf import numpy as np #加载数据 train=pd.read_csv('../Desktop/DataSets/MINIST/train.csv') test=pd.read_csv('../Desktop/DataSets/MINIST/test.csv') X_train=tra...

BRAVE_NO1的专栏 722

tensorflow2 minist手写数字识别数据训练

以上就是本次的内容,来总结一下吧:主要介绍了tensorflow2梯度下降算法实现minist手写数字数据集的训练,并对结果进行可视化展示。

xiao2macf的专栏 2878

用TensorFlow Lite 写个手写体识别 APP

今天有个网友在手把手教你在Android上搭建tensorflow Lite2.0这篇文章下评论 求问如何进行一个图像的输入和数组的输出? 我想这也是很多初学者的痛点,很多入门同学都没有完整从模型建立,训练,到转换成TensorFlowLite,并在Android中实际的用。 于是我就把我之前写的demo给了他,想想还是抽空把这个demo写成文章,希望能够给帮助到更多的入门的同学。 虽然基于TensorFlow 实现手写体的文章,一抓一大把,但是我还是有必要啰嗦下,毕竟它是很好的入门人工智能的实例。 我

Howzit 1749

TensorFlow2 入门指南 | 04 分类问题实战之手写数字识别

一份适合初学者的TensorFLow2入门指南!

不积跬步,无以至千里! 3098

【Tensorflow生成minist手写图像以及解决遇到的问题】

Tensorflow生成minist手写图像以及解决遇到的问题 解决No module named ‘tensorflow.examples.tutorials‘ 解决tensorflow1与tensorflow2不兼容问题

weixin_44906810的博客 933

人工智能MINIST手写数字识别之MINIST概念

举个例子,一个模型当图片上的手写体数字是9时有80%的可能性识别的结果是9,还有5%的可能性识别出的结果是8。softmax回归的作用是可以将概率分配给几个不同的对象,softmax提供了一个值处于0到1之间的列表,而列表中的值加起来为1。在训练的过程中,我们必须单独保留一份没有用于机器训练的数据作为验证的数据,这才能确保训练的结果的可行性。训练数据集和测试数据集都是同样的结构,例如:训练的图片名为 mnist.train.images 而训练的标签名为 mnist.train.labels。

人工智能研究所的博客 1973

基于CNn的MINIST手写体识别

深度学习之美:基于CNN卷积神经网络的MINIST手写体识别 ,通过tensorflow实现

m0_62819329的博客 1万+

tensorflow2.0实现mnist手写数字识别代码

基于python3.7版本的tensorflow2.0实现mnist手写数字识别代码

手把手教你用芯驰X9HP驱动MAX96755/MAX96752点亮智能座舱仪表屏(附完整寄存器配置表)

本文详细介绍了如何使用芯驰X9HP驱动MAX96755/MAX96752实现智能座舱仪表屏的完整开发流程,包括硬件架构解析、关键寄存器配置、Linux BSP集成及调试技巧。通过实战指南和完整寄存器配置表,帮助开发者快速掌握驱动开发核心技术,提升智能座舱系统的显示性能与稳定性。

weixin_30879169的博客 526

第1例 基于全连接网络的手写体数字MNIST识别

第1例:基于全连接网络的手写体数字MNIST识别 1.1 环境说明 Window10 tensorflow2.x 1.2 理论说明 全连接网络,实质上是多层感知器,作为分类器出现在应用中。 单层感知器是一个简单的线性分类器,能够处理线性二分类问题。 多层感知器由单层感知器组合而成,能够处理非线性多分类问题。 1.2.1 单层感知器 结构如下: 计算过程的理解: 求和:s=w1∗x1+w2∗x2+...+w3∗x3s = w1*x1+w2*x2+...+w3*x3s=w1∗x1+w2∗x2+...+

AI学长 1653

AUTOSAR RTE配置实战:从ECU分区到Task映射的完整指南

本文提供了一份AUTOSAR RTE配置的完整实战指南。从创建ECU分区、定义OS任务,到实现Runnable Entity与Task的精确映射,详细解析了每一步的操作要点与常见陷阱。文章结合配置工具界面,旨在帮助开发者高效完成RTE配置,确保系统实时性与数据一致性,是掌握AUTOSAR核心开发流程的实用参考。

weixin_29228203的博客 486

tensorflow入门之MINIST手写数字识别

最近在学tensorflow,看了很多资料以及相关视频,有没有大佬推荐一下比较好的教程之类的,谢谢。最后还是到了官方网站去,还好有官方文档中文版,今天就结合官方文档以及之前看的教程写一篇关于MINIST手写数字识别,小白一枚,不足之处还请大家多多见谅。 tensorflow的安装 这个确实是个问题,很多人用tensorflow1.0,当然也有人用tensorflow2.0。为了避免这个问题,我装了...

xiyangxia666hui的博客 1556

V90伺服 EPOS模式下回原(详细配置+SCL源代码)

/ 输出上限 100.0%rSetPoint : Real;// 设置目标值工程量。// 通道转换参考值。Td : Real;

RXXW_Dor的博客 2666

VIIRS-NPP夜间灯光遥感数据下载和预处理

右侧搜索框搜索“按掩膜提取”,提取出夜光影像中国区域。将其转换为Albers积投影和重采样到400m。点击右上角Export,选择shp格式。最后点export导出就行。点击复制按钮,来到这个。,ctrl + v粘贴。将小于0.3的值置为0。下载好月合成产品后,

热爱分享,热爱记录 1万+

基于Tensorflow的MINIST手写体识别

MINIS手写体识别相当于机器学习中的Hello world,作为深度学习领域的入门任务是初学者的首选。 数据集下载 download.py 1. MINIST数据集 MINIST数据集是一个图片压缩包,包含大量手写数字图片; 其中一个数据样本有两部分构成:手写图片和label; 数据集每个样本都是(1,784)维度的图片,为了方便展示就像下图一样画成二维矩阵,实际上后面要将向量转换为28*28的二维矩阵; 2. 读取数据 TensorFlow为了教学MNIST而提前编制了程序,所以只需两行.

Emperor10的博客 1202

Java开发者终极抉择:IntelliJ IDEA vs VS Code —— 4大维度深度对比评测

🔥关注墨瑾轩,带你探索Java的奥秘!🚀🔥超萌技术攻略,轻松晋级编程高手!🚀🔥技术宝库已备好,就等你来挖掘!🚀🔥订阅墨瑾轩,智趣学习不孤单!🚀🔥即刻启航,编程之旅更有趣!🚀在Java开发领域,选择合适的集成开发环境(IDE)对于提高开发效率和代码质量至关重要。和(简称VS Code)是两个广受好评的开发工具,各自拥有独特的特性和庞大的用户群。本篇将从多个维度深入探讨这两款IDE对Java开发者来说的优劣,包括但不限于性能、用户体验、生态系统、调试能力、以及特定Java功能的支持等方面。

java专栏 8591

搭建CNN进行MNIST手写数字识别(Tensorflow2.0实现)

本文使用Tensorflow2.0搭建CNN进行MNIST手写数字识别。Tensorflow2.0的使用方法参照Tensroflow官方教程 下面给出具体代码及运行结果: 导入模块和数据集 #导入模块 import tensorflow as tf #导入数据集 mnist = tf.keras.datasets.mnist (x_train, y_train), (x_test, y_test)...

qq_43673118的博客 5187

ABAP RAP 行为建模深入学习:从 Behavior Definition 到 Behavior Implementation 的完整实践指南

ABAP RAP开发指南:业务行为定义与实现 本文介绍SAP RAP框架中业务对象行为的开发方法: 分层设计 Behavior Definition声明业务能力(增删改查、校验、动作等) Behavior Implementation在ABAP类中编写具体逻辑 核心组件 使用BDL定义业务行为 通过FOR BEHAVIOR OF绑定行为池类(ABP) 在本地类实现校验/确定/动作逻辑 关键特性 支持managed/unmanaged两种实现模式 提供草稿表、并发控制等企业级功能 通过EML以别名访问实体 开

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 414

2. Android_逆向的历史与发展

学完本节,希望你能够:了解 Android 逆向工程的发展历程,从早期 APK 破解到现代应用保护;入门先把这几类「在干啥」搞清楚,后面学脱壳、反反调试会顺很多。(反编译 APK 得到的类汇编代码,相当于程序的「菜谱」)就能绕过验证,到后来混淆、加固、反调试一起上,逆向难度越来越高。(第三节 什么是 CPU 指令集),帮你搞清楚「反汇编看到的那些指令」是从哪来的、和 Android 逆向有啥关系。有必要——先搞清「没加固时怎么玩」,再学脱壳和对抗,思路才顺。读起来费劲,但逻辑还在,耐心一点还能跟。

长沙火山 1391

T1:minist手写数字识别

本周使用tensorflow.keras进行MNIST数据集识别,学习了解了专门的模块和函数,也感受到了其与之前学习的pytorch框架的不同,但是网络构建和训练的核心思想仍旧没变。通过下面的网络结构我们可以简单理解为,输入一张图片,将会得到一组数,这组代表这张图片上的数字为0~9中每一个数字的几率(并非概率),out数字越大可能性越大,仅此而已。优点:神经元个数增加,模型复杂度提升;理论上都可以提高模型的学习能力。优点:神经元个数增加,模型复杂度提升。激活函数的作用是增加模型的非线性表达能力。

zoey123456789的博客 1212

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

机器学习-Tensorflow基于MNIST数据集,导入minist数据集,创建,保存模型,用模型测试识别自己的手写数字

从下载Anaconda到实现MNIST手写数字识别成功的整个过程 一、下载最新版本的Anaconda,根据Anaconda安装tensorflow 【参考另一篇博客】https://blog.csdn.net/qq_22016915/article/details/101153861 二、用Anaconda中自带的Spyder编写代码(在tensorflow环境下执行) ...

qq_22016915的博客 4941

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: Tensorflow2.0之经典数据集加载
下一篇: Tensorflow2.0之输出层设计
AndSonder
博客等级 码龄7年 364粉丝 154原创
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值