当前位置: 首页 > wzjs >正文

上海建设监理协会网站wordpress qiniu-uploader 使用

上海建设监理协会网站,wordpress qiniu-uploader 使用,东营网,淘宝网站网页设计说明模型工作流程 模型由许多层链接在一起组成,并将输入数据映射为预测值。随后,损失函数将这些预测值与目标值进行比较,得到一个损失值,用于衡量模型预测值与预期结果之间的匹配程度。优化器将利用这个损失值来更新模型权重。 下面是…

模型工作流程

模型由许多链接在一起组成,并将输入数据映射为预测值。随后,损失函数将这些预测值与目标值进行比较,得到一个损失值,用于衡量模型预测值与预期结果之间的匹配程度。优化器将利用这个损失值来更新模型权重

在这里插入图片描述

下面是输入数据。

(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
train_images = train_images.reshape((60000, 28 * 28))
train_images = train_images.astype("float32") / 255
test_images = test_images.reshape((10000, 28 * 28))
test_images = test_images.astype("float32") / 255

输入图像保存在float32类型的NumPy张量中,其形状分别为(60000,784)(训练数据)和(10000, 784)(测试数据)​。
下面是模型。

model = keras.Sequential([layers.Dense(512, activation="relu"),layers.Dense(10, activation="softmax")
])

这个模型包含两个链接在一起的Dense层,每层都对输入数据做一些简单的张量运算,这些运算都涉及权重张量。权重张量是该层的属性,里面保存了模型所学到的知识。
下面是模型编译。

model.compile(optimizer="rmsprop",loss="sparse_categorical_crossentropy",metrics=["accuracy"])

sparse_categorical_crossentropy是损失函数,是用于学习权重张量的反馈信号,在训练过程中应使其最小化。降低损失值是通过小批量随机梯度下降来实现的。梯度下降的具体方法由第一个参数给定,即rmsprop优化器。

下面是训练循环。

model.fit(train_images, train_labels, epochs=5, batch_size=128)

在调用fit时:模型开始在**训练数据(共60000个样本)**上进行迭代(每个小批量包含128个样本)​,共迭代5轮[在所有训练数据上迭代一次叫作一轮(epoch)]。对于每批数据,模型会计算损失相对于权重的梯度(利用反向传播算法,这一算法源自微积分的链式法则)​,并将权重沿着减小该批量对应损失值的方向移动。5轮之后,模型共执行2345次梯度更新(每轮469次)​,模型损失值将变得足够小,使得模型能够以很高的精度对手写数字进行分类。

用TensorFlow从头开始重新实现模型

简单的Dense类

Dense层实现了下列输入变换,其中W和b是模型参数,activation是一个逐元素的函数(通常是relu,但最后一层是softmax)​。

output = activation(dot(W, input) + b)

我们实现一个简单的Python类NaiveDense,它创建了两个TensorFlow变量W和b,并定义了一个__call__()方法供外部调用,以实现上述变换。

import tensorflow as tfclass NaiveDense:#构造函数def __init__(self, input_size, output_size, activation):#模拟keras的dense层可以设置激活函数self.activation = activationw_shape = (input_size, output_size)#创建一个形状为(input_size, output_size)的矩阵W,并将其随机初始化w_initial_value = tf.random.uniform(w_shape, minval=0, maxval=1e-1)self.W = tf.Variable(w_initial_value)b_shape = (output_size,)#创建一个形状为(output_size,)的零向量bb_initial_value = tf.zeros(b_shape)self.b = tf.Variable(b_initial_value)#前向传播def __call__(self, inputs):return self.activation(tf.matmul(inputs, self.W) + self.b)#获取该层权重的便捷方法@propertydef weights(self):#以列表的形式返回本层的权重return [self.W, self.b]

我们总结一下NaiveDense实现了哪些步骤:
1.根据输入输出的形状初始化权重(kernel和bias)以实现仿射变换
2.初始化激活函数
3.实现前向传播函数(反向传播可以通过tensorflow的梯度带实现)
4.提供获取权重的方式

简单的Sequential类

我们创建一个NaiveSequential类来实现模型,将这些层链接起来。它封装了一个层列表(正如我们前面提到的模型由一系列层构成),并定义了一个__call__()方法供外部调用。这个方法将按顺序调用输入的层。它还有一个weights属性,用于记录所有层的权重。

class NaiveSequential:def __init__(self, layers):self.layers = layersdef __call__(self, inputs):x = inputsfor layer in self.layers:x = layer(x)return x@propertydef weights(self):weights = []for layer in self.layers:weights += layer.weightsreturn weights

按照惯例,总结一下这个Sequential实现了哪些行为:
1.封装层列表
2.一次调用层列表中的层进行前向传播

实例化模型

利用NaiveSequential来实例化模型

model = NaiveSequential([NaiveDense(input_size=28 * 28, output_size=512, activation=tf.nn.relu),NaiveDense(input_size=512, output_size=10, activation=tf.nn.softmax)
])
assert len(model.weights) == 4

批量生成器(batch)

对MNIST数据进行小批量迭代。

import mathclass BatchGenerator:def __init__(self, images, labels, batch_size=128):assert len(images) == len(labels)self.index = 0self.images = imagesself.labels = labelsself.batch_size = batch_sizeself.num_batches = math.ceil(len(images) / batch_size)def next(self):images = self.images[self.index : self.index + self.batch_size]labels = self.labels[self.index : self.index + self.batch_size]self.index += self.batch_sizereturn images, labels

批量生成器很简单,就是将训练数据保存下来,每次迭代产生批量大小的数据。

本文所有的代码汇总如下:

import tensorflow as tfclass NaiveDense:#构造函数def __init__(self, input_size, output_size, activation):#模拟keras的dense层可以设置激活函数self.activation = activationw_shape = (input_size, output_size)#创建一个形状为(input_size, output_size)的矩阵W,并将其随机初始化w_initial_value = tf.random.uniform(w_shape, minval=0, maxval=1e-1)self.W = tf.Variable(w_initial_value)b_shape = (output_size,)#创建一个形状为(output_size,)的零向量bb_initial_value = tf.zeros(b_shape)self.b = tf.Variable(b_initial_value)#前向传播def __call__(self, inputs):return self.activation(tf.matmul(inputs, self.W) + self.b)#获取该层权重的便捷方法@propertydef weights(self):#以列表的形式返回本层的权重return [self.W, self.b]class NaiveSequential:def __init__(self, layers):self.layers = layersdef __call__(self, inputs):x = inputsfor layer in self.layers:x = layer(x)return x@propertydef weights(self):weights = []for layer in self.layers:weights += layer.weightsreturn weightsmodel = NaiveSequential([NaiveDense(input_size=28 * 28, output_size=512, activation=tf.nn.relu),NaiveDense(input_size=512, output_size=10, activation=tf.nn.softmax)
])
assert len(model.weights) == 4import mathclass BatchGenerator:def __init__(self, images, labels, batch_size=128):assert len(images) == len(labels)self.index = 0self.images = imagesself.labels = labelsself.batch_size = batch_sizeself.num_batches = math.ceil(len(images) / batch_size)def next(self):images = self.images[self.index : self.index + self.batch_size]labels = self.labels[self.index : self.index + self.batch_size]self.index += self.batch_sizereturn images, labels
http://www.dtcms.com/wzjs/549249.html

相关文章:

  • 网站开发环境实验报告免费的行情软件网站不用下载
  • 公司网站建设调研长沙网络营销公司哪家好
  • dedecms购物网站模板如何引用404做网站
  • 广州专业建网站公司wordpress分类id
  • 重庆营销网站建设公司排名福州贸易公司网站制作
  • 广州网站排名推广上虞网站建设文广网络
  • 信息网站 cmstaxonomy wordpress
  • 营销型网站建设一般要多少钱企业推广平台排行榜
  • 目的地网络营销是什么seo广告
  • 中小企业的网站建设 论文北京培训机构
  • 旅游商务平台网站建设功能需求腾讯微信官网
  • 个人网站建设基本定位做微信请帖网站
  • 企业网站策划建设方案百度wordpress美食主题
  • 网络网站制作技巧宁波网站推广专业的建站优化公司
  • 百度网站官网怎么做穷人创业一千元以下的
  • 电子商务网站建设课外实训网站优化工作
  • 江苏做网站怎么收费凡客诚品官网手机下载
  • 定制网站与模板网站建站方案书
  • 网站制作jian she网站进度条做多大
  • 云南澄江县建设局网站营销网站费用
  • 合肥龙岗医院网站建设网站开发完后期维护重要吗
  • 佛山做网站永网uilike学堂
  • 购物商场网站开发过程详细说明如何建设网站盈利
  • 做网站需要买网址吗抖音广告代理商加盟
  • 一个空间放多个网站代理公司的经营范围
  • 云南seo整站优化报价深圳哪家网站建设服务好
  • 宁波网站建设方式国内顶尖设计椅子图片
  • 电子商务网站的建设方法廊坊seo关键词排名
  • 包装设计接单网站二手车网站建设意见
  • tplink虚拟服务器做网站wordpress 说说碎语