5.12【机器学习】卷积模型搭建

softmax输出时不可能为所有模型提供精确且数值稳定的损失计算

model = tf.keras.models.Sequential([tf.keras.layers.Flatten(input_shape=(28, 28)),tf.keras.layers.Dense(128, activation='relu'),tf.keras.layers.Dropout(0.2),tf.keras.layers.Dense(10)
])
mnist = tf.keras.datasets.mnist(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

 打开一个遍历个周期的FOR循环

对于每个周期,打开一个分批遍历数据集的FOR循环

glob,返回所有匹配的文件路径列表,需要一个参数用来指定匹配的路径字符串(字符串可以为绝对路径,也可以为相对路径),其返回的文件名只包括当前目录里的文件名,不包括子文件夹里的文件

glob.glob(r'c:*.txt')

可以根据层将要运算的输入的形状启用变量创建,根据层将要运算的输入的形状启用变量创建

而在__init__则意味着需要指定创建变量所需的形状

卷积、批次归一化和捷径的组合

_ = layer(tf.zeros([10, 5])) # Calling the layer `.builds` it.
class ResnetIdentityBlock(tf.keras.Model):def __init__(self, kernel_size, filters):super(ResnetIdentityBlock, self).__init__(name='')filters1, filters2, filters3 = filtersself.conv2a = tf.keras.layers.Conv2D(filters1, (1, 1))self.bn2a = tf.keras.layers.BatchNormalization()self.conv2b = tf.keras.layers.Conv2D(filters2, kernel_size, padding='same')self.bn2b = tf.keras.layers.BatchNormalization()self.conv2c = tf.keras.layers.Conv2D(filters3, (1, 1))self.bn2c = tf.keras.layers.BatchNormalization()def call(self, input_tensor, training=False):x = self.conv2a(input_tensor)x = self.bn2a(x, training=training)x = tf.nn.relu(x)x = self.conv2b(x)x = self.bn2b(x, training=training)x = tf.nn.relu(x)x = self.conv2c(x)x = self.bn2c(x, training=training)x += input_tensorreturn tf.nn.relu(x)block = ResnetIdentityBlock(1, [1, 2, 3])

自己的训练循环分为三个步骤,迭代Python生成器或tf.data.Dataset获得样本批次

使用tf.G收集梯度

tf.opt将权重更新应用于模型

tf.random.set_seed(2345)
current_time = datetime.datetime.now().strftime(('%Y%m%d-%H%M%S'))
log_dir = 'logs/'+current_time
summary_writer = tf.summary.create_file_writer(log_dir)def preprocess(x, y):# [0~1]x = 2 * tf.cast(x, dtype=tf.float32) / 255. - 1y = tf.cast(y, dtype=tf.int32)return x, ydata_dir = 'D:\\MachineLearning\\exp3\\flowers'batch_size = 32
img_height = 32
img_width = 32
#从磁盘中获取数据并进行划分
train_ds = tf.keras.utils.image_dataset_from_directory(data_dir,validation_split=0.2,subset="training",seed=123,image_size=(img_height, img_width),batch_size=batch_size)
val_ds = tf.keras.utils.image_dataset_from_directory(data_dir,validation_split=0.2,subset="validation",seed=123,image_size=(img_height, img_width),batch_size=batch_size)
class_names = train_ds.class_names
print(class_names)
# # Set `num_parallel_calls` so multiple images are loaded/processed in parallel.
# train_ds = train_ds.map(process_path, num_parallel_calls=AUTOTUNE)
# val_ds = val_ds.map(process_path, num_parallel_calls=AUTOTUNE)
# for image, label in train_ds.take(1):
#   print("Image shape: ", image.numpy().shape)
#   print("Label: ", label.numpy())
# for image_batch, labels_batch in train_ds:
#   print(image_batch.shape)
#   print(labels_batch.shape)
#   break
def configure_for_performance(ds):ds = ds.cache()ds = ds.shuffle(buffer_size=1000)ds = ds.batch(batch_size)ds = ds.prefetch(buffer_size=AUTOTUNE)return ds
# train_ds = configure_for_performance(train_ds)
# val_ds = configure_for_performance(val_ds)
# train_ds= tf.squeeze(train_ds, axis=1)
# val_ds= tf.squeeze(val_ds, axis=1)
# (x, y), (x_test, y_test) = datasets.cifar10.load_data()
# y = tf.squeeze(y, axis=1)
# y_test = tf.squeeze(y_test, axis=1)
# print(x.shape, y.shape, x_test.shape, y_test.shape)
#
# train_db = tf.data.Dataset.from_tensor_slices((x, y))
# train_db = train_db.shuffle(1000).map(preprocess).batch(256)
#
# test_db = tf.data.Dataset.from_tensor_slices((x_test, y_test))
# test_db = test_db.map(preprocess).batch(256)
#
# sample = next(iter(train_db))
# print('sample:', sample[0].shape, sample[1].shape,
#       tf.reduce_min(sample[0]), tf.reduce_max(sample[0]))
def main():# [b, 32, 32, 3] => [b, 1, 1, 512]model = ResNetmodel()model.build([None, 32, 32, 3])# model.summary() # 统计网络参数optimizer = optimizers.Adam(learning_rate=1e-3)# [1, 2] + [3, 4] => [1, 2, 3, 4]variables = model.trainable_variablesfor epoch in range(100):for step, (x, y) in enumerate(train_ds):with tf.GradientTape() as tape:# [b, 32, 32, 3] => [b, 1, 1, 512]out = model(x)# [b] => [b, 5]y_onehot = tf.one_hot(y, depth=5)# compute lossloss = tf.losses.categorical_crossentropy(y_onehot, out, from_logits=True)loss = tf.reduce_mean(loss)grads = tape.gradient(loss, variables)optimizer.apply_gradients(zip(grads, variables))if step % 100 == 0:with summary_writer.as_default():tf.summary.scalar('loss', loss, step=step)total_num = 0total_correct = 0for x, y in val_ds:out = model(x)prob = tf.nn.softmax(out, axis=1)pred = tf.argmax(prob, axis=1)pred = tf.cast(pred, dtype=tf.int32)correct = tf.cast(tf.equal(pred, y), dtype=tf.int32)correct = tf.reduce_sum(correct)total_num += x.shape[0]total_correct += int(correct)acc = total_correct / total_numwith summary_writer.as_default():tf.summary.scalar('acc', float(acc), step=epoch)if __name__ == '__main__':main()

 需要在每个周期之间对指标调用

optimizer = tf.keras.optimizers.Adam(0.001)
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
@tf.function
def train_step(inputs, labels):with tf.GradientTape() as tape:predictions = model(inputs, training=True)regularization_loss=tf.math.add_n(model.losses)pred_loss=loss_fn(labels, predictions)total_loss=pred_loss + regularization_lossgradients = tape.gradient(total_loss, model.trainable_variables)optimizer.apply_gradients(zip(gradients, model.trainable_variables))for epoch in range(NUM_EPOCHS):for inputs, labels in train_ds:train_step(inputs, labels)print("Finished epoch", epoch)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/484207.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

头歌 Linux之线程管理

第1关:创建线程 任务描述 通常我们编写的程序都是单进程,如果在一个进程中没有创建新的线程,则这个单进程程序也就是单线程程序。本关我们将介绍如何在一个进程中创建多个线程。 本关任务:学会使用C语言在Linux系统中使用pthrea…

工业机器视觉-基于深度学习的水表表盘读数识别

字轮数字识别、指针读数识别(角度换算)、根据指针角度进行读数修正、根据最高位指针(x0.1)读数对字轮数字进行修正、得到最终读数。 基于深度学习的目标检测技术和OpenCV图像处理技术,可识别所有类型的表盘机械读数。

超详细MacBook Pro(M1)配置GO语言环境(图文超详细版)

前提 当我第一次使用MacBook配置Go语言环境时,网上的资料错综复杂,部分资料对于第一次使用MacBook的小白们非常不友好,打开终端时,终端的位置对应的访达中的位置不是很清楚,因此才有了这篇文章,该文章通过…

大数据项目-Django基于聚类算法实现的房屋售房数据分析及可视化系统

《[含文档PPT源码等]精品Django基于聚类算法实现的房屋售房数据分析及可视化系统》该项目含有源码、文档、PPT、配套开发软件、软件安装教程课程答疑等! 数据库管理工具:phpstudy/Navicat或者phpstudy/sqlyog 后台管理系统涉及技术: 后台使…

魔改版kali分享(新增50多种渗透工具)

网盘链接 我用夸克网盘分享了「Kali Linux 定制化魔改系统」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。 链接:https://pan.quark.cn/s/dda56f7e3431 提取码:…

矩阵加法        ‌‍‎‏

矩阵加法 C语言代码C 语言代码Java语言代码Python语言代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 输入两个n行m列的矩阵A和B&#xff0c;输出它们的和AB。 输入 第一行包含两个整数n和m&#xff0c;表示矩阵的行数和列数。1 <…

前端开发 之 15个页面加载特效下【附完整源码】

文章目录 十二&#xff1a;铜钱3D圆环加载特效1.效果展示2.HTML完整代码 十三&#xff1a;扇形百分比加载特效1.效果展示2.HTML完整代码 十四&#xff1a;四色圆环显现加载特效1.效果展示2.HTML完整代码 十五&#xff1a;跷跷板加载特效1.效果展示2.HTML完整代码 十二&#xff…

微信 创建小程序码-有数量限制

获取小程序码&#xff1a;小程序码为圆图&#xff0c;有数量限制。 目录 文档 接口地址 功能描述 注意事项 请求参数 对接 获取小程序码 调用获取 小程序码示例 总结 文档 接口地址 https://api.weixin.qq.com/wxa/getwxacode?access_tokenaccess_token 功能描述 …

DP、CP、Mn是什么?有什么关系?双径节齿轮又是什么?

有一些刚刚接触齿轮的小伙伴们&#xff0c;经常听到和齿轮相关的是Mn这个代号&#xff0c;有时候拿到图纸会碰到DP和CP的图纸&#xff0c;今天就简单数一数他们三个的关系&#xff1a; 径节DP 齿轮的节距定义为两个相邻齿轮齿上两个相同点之间的距离。在理想情况下&#xff0c…

Linux之socket编程(一)

前言 网络通信的目的 我们已经大致了解了网络通信的过程: 如果主机A想发送数据给主机B, 就需要不断地对本层的协议数据单元(PDU)封装, 然后经过交换设备的转发发送给目的主机, 最终解封装获取数据. 那么网络传输的意义只是将数据由一台主机发送到另一台主机吗&#xff1f; …

视频 的 音频通道提取 以及 视频转URL 的在线工具!

视频 的 音频通道提取 以及 视频转URL 的在线工具&#xff01; 工具地址: https://www.lingyuzhao.top/toolsPage/VideoTo.html 它提供了便捷的方法来处理视频文件&#xff0c;具体来说是帮助用户从视频中提取音频轨道&#xff0c;并将视频转换为可以通过网络访问的URL链接。无…

Java环境变量配置

在Java 的开发环境的准备中&#xff0c;一般安装完JDK之后会进行Java相关的环境变量的配置&#xff0c; 那么&#xff1a; 需要配置哪些环境变量呢&#xff1f;为什么要配置这些环境变量呢&#xff1f; Java 相关的环境变量 JAVA_HOME &#xff0c; &#xff3b;新增环境变量…

sizeof和strlen区分,(好多例子)

sizeof算字节大小 带\0 strlen算字符串长度 \0之前

STM32 DMA直接存储器存取原理及DMA转运模板代码

DMA简介&#xff1a; 存储器映像&#xff1a; 注意&#xff1a;FLASH是只读的&#xff0c;DMA不能写入&#xff0c;但是可以读取写到其他存储器里 变量是存在运行内存SRAM里的&#xff0c;常量&#xff08;const&#xff09;是放在程序存储器FLASH里的 DMA框图&#xff1a; …

释放超凡性能,打造鸿蒙原生游戏卓越体验

11月26日在华为Mate品牌盛典上&#xff0c;全新Mate70系列及多款全场景新品正式亮相。在游戏领域&#xff0c;HarmonyOS NEXT加持下游戏的性能得到充分释放。HarmonyOS SDK为开发者提供了软硬协同的系统级图形加速解决方案——Graphics Accelerate Kit&#xff08;图形加速服务…

【专题】计算机网络之运输层(传输层)

1. 运输层协议概述 1.1 进程之间的通信 (1) 运输层的作用 运输层提供进程间的逻辑通信。 运输层的屏蔽作用&#xff1a; 运输层向高层用户屏蔽了下面网络核心的细节&#xff08;如网络拓扑、所采用的路由选择协议等&#xff09;&#xff0c;使应用进程看见的就是好像在两个运…

四轮阿克曼(前轮转向、后轮驱动)车子仿真控制

目录 写在前面的话调用 libgazebo_ros_ackermann_drive.so 插件属性介绍补充 steering_wheel_joint 配置键盘控制命令 结果演示 写在前面的话 这里增加一个四轮阿克曼&#xff08;前轮转向、后轮驱动&#xff09;车子仿真控制的版本&#xff0c;使用的事gazebo的插件 参考资料…

移植NIOS10.1工程,NIOS10.1路径修改

移植NIOS10.1工程&#xff0c;NIOS10.1路径修改 因工程的需要&#xff0c;使用的NIOS10.1&#xff0c;比较老&#xff0c;这个版本的路径是使用的绝对路径&#xff0c;导致移植工程市回报路径的错误&#xff0c;在13.1之后改为了相对路径&#xff0c;不存在这个问题。 需要修…

【ElasticSearch】倒排索引与ik分词器

ElasticSearch&#xff0c;简称ES(后文将直接使用这一简称)&#xff0c;是一款卓越的开源分布式搜索引擎。其独特之处在于其近乎实时的数据检索能力&#xff0c;为用户提供了迅速、高效的信息查询体验。 它能够解决全文检索&#xff0c;模糊查询、数据分析等问题。那么它的搜索…

【从零开始的LeetCode-算法】74. 搜索二维矩阵

给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。…