J3学习打卡

  • 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
  • 🍖 原作者:K同学啊

DensNet模型

import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.keras import layers, models, initializersclass DenseLayer(layers.Layer):def __init__(self, growth_rate, drop_rate=0.1):super(DenseLayer, self).__init__()self.drop_rate = drop_rateself.norm1 = layers.BatchNormalization()self.relu1 = layers.ReLU()self.conv1 = layers.Conv2D(filters=4 * growth_rate, kernel_size=1, use_bias=False)self.norm2 = layers.BatchNormalization()self.relu2 = layers.ReLU()self.conv2 = layers.Conv2D(filters=growth_rate, kernel_size=3, padding='same', use_bias=False)# Create Dropout layer once, not in callif self.drop_rate > 0:self.dropout = layers.Dropout(self.drop_rate)def call(self, inputs, training=False):x = self.conv1(self.relu1(self.norm1(inputs, training=training)))x = self.conv2(self.relu2(self.norm2(x, training=training)))if self.drop_rate > 0:x = self.dropout(x, training=training)  # Use the predefined dropout layerreturn layers.Concatenate()([inputs, x])class DenseBlock(tf.keras.layers.Layer):def __init__(self, num_layers, growth_rate, drop_rate):super(DenseBlock, self).__init__()self.num_layers = num_layersself.layers_list = [DenseLayer(growth_rate, drop_rate) for _ in range(num_layers)]def call(self, x, training=False):for layer in self.layers_list:x = layer(x, training=training)return xclass TransitionLayer(tf.keras.layers.Layer):def __init__(self, num_output_features):super(TransitionLayer, self).__init__()self.norm = layers.BatchNormalization()self.relu = layers.ReLU()self.conv = layers.Conv2D(num_output_features, kernel_size=1, strides=1, use_bias=False)self.pool = layers.AveragePooling2D(pool_size=2, strides=2)def call(self, x, training=False):x = self.conv(self.relu(self.norm(x, training=training)))x = self.pool(x)return xclass DenseNet(tf.keras.Model):def __init__(self, growth_rate=32, block_config=(6, 12, 24, 16), num_init_features=64,bn_size=8, compression_rate=0.5, drop_rate=0.1, num_classes=4):super(DenseNet, self).__init__()# Initial Conv Layerself.features = models.Sequential([layers.Conv2D(num_init_features, kernel_size=7, strides=2, padding='same', use_bias=False),layers.BatchNormalization(),layers.ReLU(),layers.MaxPooling2D(pool_size=3, strides=2, padding='same'),])# DenseBlocks and Transitionsnum_features = num_init_featuresfor i, num_layers in enumerate(block_config):self.features.add(DenseBlock(num_layers, growth_rate, drop_rate))num_features += num_layers * growth_rateif i != len(block_config) - 1:out_features = int(num_features * compression_rate)self.features.add(TransitionLayer(out_features))num_features = out_features# Final Batch Norm and ReLUself.features.add(layers.BatchNormalization())self.features.add(layers.ReLU())# Classification Layerself.classifier = layers.Dense(num_classes, kernel_initializer=initializers.he_normal())def call(self, x, training=False):x = self.features(x, training=training)  # Pass the 'training' argumentx = layers.GlobalAveragePooling2D()(x)x = self.classifier(x)return x# 设置数据路径
data_dir = r"C:\Users\11054\Desktop\kLearning\J1_learning\bird_photos"batch_size = 8
img_height = 224
img_width = 224train_ds = tf.keras.preprocessing.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.preprocessing.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)
plt.figure(figsize=(10, 5))  # 图形的宽为10高为5
plt.suptitle("微信公众号:K同学啊")for images, labels in train_ds.take(1):for i in range(8):ax = plt.subplot(2, 4, i + 1)plt.imshow(images[i].numpy().astype("uint8"))plt.title(class_names[labels[i]])plt.axis("off")plt.imshow(images[1].numpy().astype("uint8"))for image_batch, labels_batch in train_ds:print(image_batch.shape)print(labels_batch.shape)break
AUTOTUNE = tf.data.AUTOTUNEtrain_ds = train_ds.cache().shuffle(1000).prefetch(buffer_size=AUTOTUNE)
val_ds = val_ds.cache().prefetch(buffer_size=AUTOTUNE)
# 添加自定义层
model = DenseNet(num_classes=4)# 编译模型
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',  # 使用稀疏分类交叉熵metrics=['accuracy'])# 训练模型
epochs = 10
history = model.fit(train_ds,validation_data=val_ds,epochs=epochs
)# 绘制训练和验证过程中的损失及准确率
plt.figure(figsize=(12, 4))# 绘制训练和验证损失
plt.subplot(1, 2, 1)
plt.plot(history.history['loss'], label='Train Loss')
plt.plot(history.history['val_loss'], label='Validation Loss')
plt.title('Loss')
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.legend()# 绘制训练和验证准确率
plt.subplot(1, 2, 2)
plt.plot(history.history['accuracy'], label='Train Accuracy')
plt.plot(history.history['val_accuracy'], label='Validation Accuracy')
plt.title('Accuracy')
plt.xlabel('Epoch')
plt.ylabel('Accuracy')
plt.legend()plt.show()
Found 565 files belonging to 4 classes.
Using 452 files for training.
Found 565 files belonging to 4 classes.
Using 113 files for validation.
['Bananaquit', 'Black Skimmer', 'Black Throated Bushtiti', 'Cockatoo']
(8, 224, 224, 3)
(8,)
Epoch 1/10
[1m57/57[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m159s[0m 2s/step - accuracy: 0.4129 - loss: 3.3313 - val_accuracy: 0.2655 - val_loss: 11.8390
Epoch 2/10
[1m57/57[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m111s[0m 2s/step - accuracy: 0.5344 - loss: 2.9348 - val_accuracy: 0.2655 - val_loss: 11.3703
Epoch 3/10
[1m57/57[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m94s[0m 2s/step - accuracy: 0.3674 - loss: 2.6228 - val_accuracy: 0.2655 - val_loss: 11.6901
Epoch 4/10
[1m57/57[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m94s[0m 2s/step - accuracy: 0.4173 - loss: 2.0029 - val_accuracy: 0.2743 - val_loss: 8.5733
Epoch 5/10
[1m57/57[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m116s[0m 2s/step - accuracy: 0.5138 - loss: 1.6268 - val_accuracy: 0.2743 - val_loss: 10.3662
Epoch 6/10
[1m57/57[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m134s[0m 2s/step - accuracy: 0.3255 - loss: 2.6131 - val_accuracy: 0.2655 - val_loss: 8.9590
Epoch 7/10
[1m57/57[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m142s[0m 2s/step - accuracy: 0.3427 - loss: 3.4939 - val_accuracy: 0.3805 - val_loss: 7.2092
Epoch 8/10
[1m57/57[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m132s[0m 2s/step - accuracy: 0.3013 - loss: 3.0391 - val_accuracy: 0.2832 - val_loss: 1.3802
Epoch 9/10
[1m57/57[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m135s[0m 2s/step - accuracy: 0.3722 - loss: 2.9314 - val_accuracy: 0.2478 - val_loss: 10.2079
Epoch 10/10
[1m57/57[0m [32m━━━━━━━━━━━━━━━━━━━━[0m[37m[0m [1m140s[0m 2s/step - accuracy: 0.3580 - loss: 1.3863 - val_accuracy: 0.1770 - val_loss: 5.2081C:\Users\11054\.conda\envs\tf39\lib\site-packages\IPython\core\pylabtools.py:152: UserWarning: Glyph 24494 (\N{CJK UNIFIED IDEOGRAPH-5FAE}) missing from font(s) DejaVu Sans.fig.canvas.print_figure(bytes_io, **kw)
C:\Users\11054\.conda\envs\tf39\lib\site-packages\IPython\core\pylabtools.py:152: UserWarning: Glyph 20449 (\N{CJK UNIFIED IDEOGRAPH-4FE1}) missing from font(s) DejaVu Sans.fig.canvas.print_figure(bytes_io, **kw)
C:\Users\11054\.conda\envs\tf39\lib\site-packages\IPython\core\pylabtools.py:152: UserWarning: Glyph 20844 (\N{CJK UNIFIED IDEOGRAPH-516C}) missing from font(s) DejaVu Sans.fig.canvas.print_figure(bytes_io, **kw)
C:\Users\11054\.conda\envs\tf39\lib\site-packages\IPython\core\pylabtools.py:152: UserWarning: Glyph 20247 (\N{CJK UNIFIED IDEOGRAPH-4F17}) missing from font(s) DejaVu Sans.fig.canvas.print_figure(bytes_io, **kw)
C:\Users\11054\.conda\envs\tf39\lib\site-packages\IPython\core\pylabtools.py:152: UserWarning: Glyph 21495 (\N{CJK UNIFIED IDEOGRAPH-53F7}) missing from font(s) DejaVu Sans.fig.canvas.print_figure(bytes_io, **kw)
C:\Users\11054\.conda\envs\tf39\lib\site-packages\IPython\core\pylabtools.py:152: UserWarning: Glyph 65306 (\N{FULLWIDTH COLON}) missing from font(s) DejaVu Sans.fig.canvas.print_figure(bytes_io, **kw)
C:\Users\11054\.conda\envs\tf39\lib\site-packages\IPython\core\pylabtools.py:152: UserWarning: Glyph 21516 (\N{CJK UNIFIED IDEOGRAPH-540C}) missing from font(s) DejaVu Sans.fig.canvas.print_figure(bytes_io, **kw)
C:\Users\11054\.conda\envs\tf39\lib\site-packages\IPython\core\pylabtools.py:152: UserWarning: Glyph 23398 (\N{CJK UNIFIED IDEOGRAPH-5B66}) missing from font(s) DejaVu Sans.fig.canvas.print_figure(bytes_io, **kw)
C:\Users\11054\.conda\envs\tf39\lib\site-packages\IPython\core\pylabtools.py:152: UserWarning: Glyph 21834 (\N{CJK UNIFIED IDEOGRAPH-554A}) missing from font(s) DejaVu Sans.fig.canvas.print_figure(bytes_io, **kw)

在这里插入图片描述
在这里插入图片描述

个人总结

  1. 完成了torch到tensorflow的代码转换,但是tensorflow运行显示loss较大,模型运行效果较差
  2. DenseNet采用了密集连接(Dense Connection),每一层的输入是前面所有层的输出的拼接(concatenation),而不是求和。这种设计使得每一层都能直接访问前面所有层的特征图,从而增强了特征的重用,并且减少了梯度消失问题

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

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

相关文章

基于微信小程序的小区管理系统设计与实现(lw+演示+源码+运行)

摘 要 社会发展日新月异,用计算机应用实现数据管理功能已经算是很完善的了,但是随着移动互联网的到来,处理信息不再受制于地理位置的限制,处理信息及时高效,备受人们的喜爱。所以各大互联网厂商都瞄准移动互联网这个潮…

随机变量、取值、样本和统计量之间的关系

1. 随机变量 (Random Variable) 随机变量是用来量化随机现象结果的一种数学工具。随机变量是一个函数,它将实验结果映射到数值。随机变量可以是离散的或连续的。 离散随机变量:取有限或可数无限个值。例如,掷骰子的结果。连续随机变量&…

Matlab实现蚁群算法求解旅行商优化问题(TSP)(理论+例子+程序)

一、蚁群算法 蚁群算法由意大利学者Dorigo M等根据自然界蚂蚁觅食行为提岀。蚂蚁觅食行为表示大量蚂蚁组成的群体构成一个信息正反馈机制,在同一时间内路径越短蚂蚁分泌的信息就越多,蚂蚁选择该路径的概率就更大。 蚁群算法的思想来源于自然界蚂蚁觅食&a…

Pandas行转列与列装行

实际上,两种操作的核心代码确实非常相似,因为它们都涉及到将 JSON 数据解析并进行拆分。主要的区别在于操作的顺序和处理的对象: 一列转多列: 首先,我们将 JSON 数据列中的每个 JSON 对象解析为 Python 字典&#xff…

物联网智能项目实战:智能温室监控系统

物联网(Internet of Things, IoT)技术正在以前所未有的速度改变着我们的生活方式。通过将传感器、执行器和其他物理设备连接到互联网,物联网技术可以实现远程监测和控制。本文将通过一个具体的物联网智能项目——智能温室监控系统的实现&…

给哔哩哔哩bilibili电脑版做个手机遥控器

前言 bilibili电脑版可以在电脑屏幕上观看bilibili视频。然而,电脑版的bilibili不能通过手机控制视频翻页和调节音量,这意味着观看视频时需要一直坐在电脑旁边。那么,有没有办法制作一个手机遥控器来控制bilibili电脑版呢? 首先…

JavaEE初阶---网络原理之TCP篇(二)

文章目录 1.断开连接--四次挥手1.1 TCP状态1.2四次挥手的过程1.3time_wait等待1.4三次四次的总结 2.前段时间总结3.滑动窗口---传输效率机制3.1原理分析3.2丢包的处理3.3快速重传 4.流量控制---接收方安全机制4.1流量控制思路4.2剩余空间大小4.3探测包的机制 5.拥塞控制---考虑…

【C语言刷力扣】3216.交换后字典序最小的字符串

题目: 解题思路: 字典序最小的字符串:是指按照字母表顺序排列最前的字符串。即字符串在更靠前的位置出现比原字符串对应字符在字母表更早出现的字符。 枚举数组元素,尽早将较小的同奇偶的相邻字符交换。 char* getSmallestString…

定时器(多线程)

标准库中的定时器 • 标准库中提供了⼀个 Timer 类. Timer 类的 核⼼⽅法为 schedule . • schedule 包含两个参数. 第⼀个参数指定即将要执⾏的任务代码, 第⼆个参数指定多⻓时间之后 执⾏ (单位为毫秒). Timer timer new Timer (); timer.schedule( new TimerTas…

Linux(centOS)的安全命令

先全部列出来: 命令及其作用: - setenforce 0:将 SELinux 临时切换为宽松模式(permissive) - setenforce 1:将 SELinux 临时切换为强制模式(enforcing) - selinux的配置文件在/e…

Java:Map和Set练习

目录 查找字母出现的次数 只出现一次的数字 坏键盘打字 查找字母出现的次数 这道题的思路在后面的题目过程中能用到,所以先把这题给写出来 题目要求:给出一个字符串数组,要求输出结果为其中每个字符串及其出现次数。 思路:我…

【宠粉赠书】大模型项目实战:多领域智能应用开发

在当今的人工智能与自然语言处理领域,大型语言模型(LLM)凭借其强大的生成与理解能力,正在广泛应用于多个实际场景中。《大模型项目实战:多领域智能应用开发》为大家提供了全面的应用技巧和案例,帮助开发者深…

【商汤科技-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

Chromium HTML5 新的 Input 类型week对应c++

一、Input 类型: week week 类型允许你选择周和年。 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>test</title> </head><body><form action"demo-form.php">选择周: <inp…

Nginx防盗链配置

1. 什么是盗链? 盗链是指服务提供商自己不提供服务的内容&#xff0c;通过技术手段绕过其它有利益的最终用户界面&#xff08;如广告&#xff09;&#xff0c;直接在自己的网站上向最终用户提供其它服务提供商的服务内容&#xff0c;骗取最终用户的浏览和点击率。受益者不提供…

Oracle+11g+笔记(8)-备份与恢复机制

Oracle11g笔记(8)-备份与恢复机制 8、备份与恢复机制 8.1 备份与恢复的方法 数据库的备份是对数据库信息的一种操作系统备份。这些信息可能是数据库的物理结构文件&#xff0c;也可能是某一部分数 据。在数据库正常运行时&#xff0c;就应该考虑到数据库可能出现故障&#…

基于Multisim的篮球比赛电子记分牌设计与仿真

一、设计任务与要求 设计一个符合篮球比赛规则的记分系统。 &#xff08;1&#xff09;有得1分、2分和3分的情况&#xff0c;电路要具有加、减分及显示的功能。 &#xff08;2&#xff09;有倒计时时钟显示&#xff0c;在“暂停时间到”和“比赛时间到”时&#xff0c;发出声光…

CTF-PWN: 什么是_IO_FILE?

重要概念:fopen()返回的是一个结构体的指针 _IO_FILE 结构体在什么时候被创建&#xff1f; _IO_FILE 结构体的实例是在程序使用标准 I/O 函数&#xff08;如 fopen、fclose、fread、fwrite 等&#xff09;时创建和管理的。这个结构体实际上是 GNU C Library (glibc) 用于处理…

Apache paimon-CDC

CDC集成 paimon支持五种方式通过模式转化数据提取到paimon表中。添加的列会实时同步到Paimon表中 MySQL同步表:将MySQL中的一张或多张表同步到一张Paimon表中。MySQL同步数据库:将MySQL的整个数据库同步到一个Paimon数据库中。API同步表:将您的自定义DataStream输入同步到一…

电子信息-毕业设计选题推荐

人工智能与电子信息工程的融合 基于深度学习的电子信息系统故障诊断 人工智能算法在电子信息工程中的优化应用 电子信息工程中的智能图像识别技术 无线传感器网络 无线传感器网络在环境监测中的电子信息采集 多传感器融合的无线传感器网络应用 无线传感器网络中的数据压缩算法与…