python与深度学习(三):ANN和fashion_mnist

news2024/12/27 12:39:46

目录

  • 1. 说明
  • 2. fashion_mnist实战
  • 2.1 导入相关库
    • 2.2 加载数据
    • 2.3 数据预处理
    • 2.4 数据处理
    • 2.5 构建网络模型
    • 2.6 模型编译
    • 2.7 模型训练
    • 2.8 模型保存
    • 2.9 模型评价
    • 2.10 模型测试
    • 2.11 模型训练结果的可视化
  • 3. fashion_mnist的ANN模型可视化结果图
  • 4. 完整代码

1. 说明

本篇文章是ANN的另外一个例子,fashion_mnist,是衣服类的数据集。
可以搭建和手写数字识别的一样的模神经网络来训练模型。

2. fashion_mnist实战

2.1 导入相关库

以下第三方库是python专门用于深度学习的库

import tensorflow as tf
# 导入keras
from tensorflow import keras
# 引入内置手写体数据集mnist
from keras.datasets import fashion_mnist
# 引入绘制acc和loss曲线的库
import matplotlib.pyplot as plt
# 引入ANN的必要的类
from keras.layers import Dense, Dropout
from keras.models import Sequential
from keras import optimizers, losses, regularizers

2.2 加载数据

把fashion_mnist数据集进行加载

"1.加载数据"
"""
x_train是fashion_mnist训练集图片,大小的28*28的,y_train是对应的标签是数字
x_test是fashion_mnist测试集图片,大小的28*28的,y_test是对应的标签是数字
"""
(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()  # 加载fashion_mnist数据集
print('mnist_data:', x_train.shape, y_train.shape, x_test.shape, y_test.shape)  # 打印训练数据和测试数据的形状

2.3 数据预处理

(1) 将输入的图片进行归一化,从0-255变换到0-1;
(2) 将输入图片的形状(60000,28,28)转换成(60000,28*28),相当于将图片拉直,便于输入给神经网络;
(3) 将标签y进行独热编码,因为神经网络的输出是10个概率值,而y是1个数, 计算loss时无法对应计算,因此将y进行独立编码成为10个数的行向量,然后进行loss的计算 独热编码:例如数值1的10分类的独热编码是[0 1 0 0 0 0 0 0 0 0,即1的位置为1,其余位置为0。

def preprocess(x, y):  # 数据预处理函数
    x = tf.cast(x, dtype=tf.float32) / 255.  # 将输入的图片进行归一化,从0-255变换到0-1
    x = tf.reshape(x, [28 * 28])
    """
    # 将输入图片的形状(60000,28,28)转换成(60000,28*28),
    相当于将图片拉直,便于输入给神经网络
    """
    y = tf.cast(y, dtype=tf.int32)  # 将输入图片的标签转换为int32类型
    y = tf.one_hot(y, depth=10)
    """
    # 将标签y进行独热编码,因为神经网络的输出是10个概率值,而y是1个数,
    计算loss时无法对应计算,因此将y进行独立编码成为10个数的行向量,然后进行loss的计算
    独热编码:例如数值1的10分类的独热编码是[0 1 0 0 0 0 0 0 0 0,即1的位置为1,其余位置为0
    """
    return x, y

2.4 数据处理

数据加载进入内存后,需要转换成 Dataset 对象,才能利用 TensorFlow 提供的各种便捷功能。
通过 Dataset.from_tensor_slices 可以将训练部分的数据图片 x 和标签 y 都转换成Dataset 对象

batchsz = 128  # 每次输入给神经网络的图片数
"""
数据加载进入内存后,需要转换成 Dataset 对象,才能利用 TensorFlow 提供的各种便捷功能。
通过 Dataset.from_tensor_slices 可以将训练部分的数据图片 x 和标签 y 都转换成Dataset 对象
"""
db = tf.data.Dataset.from_tensor_slices((x_train, y_train))  # 构建训练集对象
db = db.map(preprocess).shuffle(60000).batch(batchsz)  # 将数据进行预处理,随机打散和批量处理
ds_val = tf.data.Dataset.from_tensor_slices((x_test, y_test))  # 构建测试集对象
ds_val = ds_val.map(preprocess).batch(batchsz)  # 将数据进行预处理,随机打散和批量处理

2.5 构建网络模型

构建了6层ANN网络,每层的神经元个数分别是512,256,128,64,32,10,隐藏层的激活函数是relu,输出层的激活函数是sortmax。
其中增加了Dropout层,Dropout 通过随机断开神经网络的连接,减少每次训练时实际参与计算的模型的参数量;但是在测试时,Dropout 会恢复所有的连接,保证模型测试时获得最好的性能。简单来说,Dropout层就是让上一层的部分神经网络节点数不和下一层进行连接。

"3.构建网络模型"
model = Sequential([Dense(512, activation='relu'),
                      Dropout(0.2),
                      Dense(256, activation='relu'),
                      Dropout(0.2),
                      Dense(128, activation='relu'),
                      Dropout(0.2),
                      Dense(64, activation='relu'),
                      Dense(32, activation='relu'),
                      Dense(10)])
"""
构建了6层ANN网络,每层的神经元个数分别是512,256,128,64,32,10,
隐藏层的激活函数是relu,输出层的激活函数是sortmax
"""
model.build(input_shape=(None, 28 * 28))  # 模型的输入大小
model.summary()  # 打印网络结构

2.6 模型编译

模型的优化器是Adam,另外一种优化方法,学习率是0.01,
损失函数是losses.CategoricalCrossentropy,多分类交叉熵,
性能指标是正确率accuracy。

"4.模型编译"
model.compile(optimizer='Adam',
              loss=tf.keras.losses.CategoricalCrossentropy(from_logits=True),
              metrics=['accuracy']
                )
"""
模型的优化器是Adam,学习率是0.01,
损失函数是losses.CategoricalCrossentropy,
性能指标是正确率accuracy
"""

2.7 模型训练

模型训练的次数是5,每1次循环进行测试

"5.模型训练"
history = model.fit(db, epochs=30, validation_data=ds_val, validation_freq=1)
"""
模型训练的次数是5,每1次循环进行测试
"""

2.8 模型保存

以.h5文件格式保存模型

"6.模型保存"
model.save('ann_fashion.h5')  # 以.h5文件格式保存模型

2.9 模型评价

得到测试集的正确率

"7.模型评价"
model.evaluate(ds_val)  # 得到测试集的正确率

2.10 模型测试

对模型进行测试

"8.模型测试"
sample = next(iter(ds_val))  # 取一个batchsz的测试集数据
x = sample[0]  # 测试集数据
y = sample[1]  # 测试集的标签
pred = model.predict(x)  # 将一个batchsz的测试集数据输入神经网络的结果
pred = tf.argmax(pred, axis=1)  # 每个预测的结果的概率最大值的下标,也就是预测的数字
y = tf.argmax(y, axis=1)  # 每个标签的最大值对应的下标,也就是标签对应的数字
print(pred)  # 打印预测结果
print(y)  # 打印标签数字

2.11 模型训练结果的可视化

对模型的训练结果进行可视化

"9.模型训练时的可视化"
# 显示训练集和验证集的acc和loss曲线
acc = history.history['accuracy']  # 获取模型训练中的accuracy
val_acc = history.history['val_accuracy']  # 获取模型训练中的val_accuracy
loss = history.history['loss']  # 获取模型训练中的loss
val_loss = history.history['val_loss']  # 获取模型训练中的val_loss
# 绘值acc曲线
plt.figure(1)
plt.plot(acc, label='Training Accuracy')
plt.plot(val_acc, label='Validation Accuracy')
plt.title('Training and Validation Accuracy')
plt.legend()
# 绘制loss曲线
plt.figure(2)
plt.plot(loss, label='Training Loss')
plt.plot(val_loss, label='Validation Loss')
plt.title('Training and Validation Loss')
plt.legend()
plt.show()  # 将结果显示出来

3. fashion_mnist的ANN模型可视化结果图

Epoch 1/30
469/469 [==============================] - 9s 13ms/step - loss: 0.6213 - accuracy: 0.7753 - val_loss: 0.4488 - val_accuracy: 0.8379
Epoch 2/30
469/469 [==============================] - 7s 13ms/step - loss: 0.4172 - accuracy: 0.8478 - val_loss: 0.3945 - val_accuracy: 0.8585
Epoch 3/30
469/469 [==============================] - 8s 16ms/step - loss: 0.3736 - accuracy: 0.8645 - val_loss: 0.3838 - val_accuracy: 0.8601
Epoch 4/30
469/469 [==============================] - 8s 15ms/step - loss: 0.3541 - accuracy: 0.8699 - val_loss: 0.3735 - val_accuracy: 0.8617
Epoch 5/30
469/469 [==============================] - 8s 15ms/step - loss: 0.3355 - accuracy: 0.8779 - val_loss: 0.3451 - val_accuracy: 0.8779
Epoch 6/30
469/469 [==============================] - 8s 16ms/step - loss: 0.3189 - accuracy: 0.8832 - val_loss: 0.3339 - val_accuracy: 0.8823
Epoch 7/30
469/469 [==============================] - 9s 16ms/step - loss: 0.3103 - accuracy: 0.8860 - val_loss: 0.3411 - val_accuracy: 0.8798
Epoch 8/30
469/469 [==============================] - 9s 18ms/step - loss: 0.2992 - accuracy: 0.8890 - val_loss: 0.3481 - val_accuracy: 0.8750
Epoch 9/30
469/469 [==============================] - 9s 18ms/step - loss: 0.2930 - accuracy: 0.8911 - val_loss: 0.3335 - val_accuracy: 0.8801
Epoch 10/30
469/469 [==============================] - 9s 16ms/step - loss: 0.2855 - accuracy: 0.8965 - val_loss: 0.3344 - val_accuracy: 0.8783
Epoch 11/30
469/469 [==============================] - 8s 16ms/step - loss: 0.2780 - accuracy: 0.8974 - val_loss: 0.3317 - val_accuracy: 0.8868
Epoch 12/30
469/469 [==============================] - 9s 18ms/step - loss: 0.2713 - accuracy: 0.9001 - val_loss: 0.3315 - val_accuracy: 0.8810
Epoch 13/30
469/469 [==============================] - 9s 18ms/step - loss: 0.2668 - accuracy: 0.9007 - val_loss: 0.3301 - val_accuracy: 0.8853
Epoch 14/30
469/469 [==============================] - 10s 19ms/step - loss: 0.2567 - accuracy: 0.9052 - val_loss: 0.3175 - val_accuracy: 0.8862
Epoch 15/30
469/469 [==============================] - 8s 16ms/step - loss: 0.2543 - accuracy: 0.9043 - val_loss: 0.3303 - val_accuracy: 0.8792
Epoch 16/30
469/469 [==============================] - 9s 17ms/step - loss: 0.2499 - accuracy: 0.9070 - val_loss: 0.3283 - val_accuracy: 0.8874
Epoch 17/30
469/469 [==============================] - 8s 15ms/step - loss: 0.2462 - accuracy: 0.9074 - val_loss: 0.3195 - val_accuracy: 0.8890
Epoch 18/30
469/469 [==============================] - 8s 15ms/step - loss: 0.2468 - accuracy: 0.9066 - val_loss: 0.3029 - val_accuracy: 0.8932
Epoch 19/30
469/469 [==============================] - 8s 15ms/step - loss: 0.2380 - accuracy: 0.9105 - val_loss: 0.3192 - val_accuracy: 0.8872
Epoch 20/30
469/469 [==============================] - 8s 15ms/step - loss: 0.2335 - accuracy: 0.9126 - val_loss: 0.3224 - val_accuracy: 0.8916
Epoch 21/30
469/469 [==============================] - 8s 16ms/step - loss: 0.2336 - accuracy: 0.9122 - val_loss: 0.3250 - val_accuracy: 0.8873
Epoch 22/30
469/469 [==============================] - 8s 16ms/step - loss: 0.2282 - accuracy: 0.9152 - val_loss: 0.3263 - val_accuracy: 0.8897
Epoch 23/30
469/469 [==============================] - 9s 18ms/step - loss: 0.2260 - accuracy: 0.9150 - val_loss: 0.3118 - val_accuracy: 0.8924
Epoch 24/30
469/469 [==============================] - 8s 16ms/step - loss: 0.2204 - accuracy: 0.9176 - val_loss: 0.3295 - val_accuracy: 0.8919
Epoch 25/30
469/469 [==============================] - 8s 16ms/step - loss: 0.2185 - accuracy: 0.9179 - val_loss: 0.3132 - val_accuracy: 0.8915
Epoch 26/30
469/469 [==============================] - 8s 15ms/step - loss: 0.2153 - accuracy: 0.9196 - val_loss: 0.3160 - val_accuracy: 0.8907
Epoch 27/30
469/469 [==============================] - 8s 15ms/step - loss: 0.2136 - accuracy: 0.9187 - val_loss: 0.3172 - val_accuracy: 0.8927
Epoch 28/30
469/469 [==============================] - 8s 16ms/step - loss: 0.2097 - accuracy: 0.9215 - val_loss: 0.3109 - val_accuracy: 0.8969
Epoch 29/30
469/469 [==============================] - 9s 17ms/step - loss: 0.2057 - accuracy: 0.9231 - val_loss: 0.3233 - val_accuracy: 0.8949
Epoch 30/30
469/469 [==============================] - 8s 16ms/step - loss: 0.2045 - accuracy: 0.9232 - val_loss: 0.3105 - val_accuracy: 0.8942

在这里插入图片描述
在这里插入图片描述
从以上结果可知,模型的准确率达到了89%,并不是很高,可以对模型的结构进行优化,另外ANN模型对图片的识别准确率有效,针对于图片分类问题,CNN模型会更加有效,这将在后续文章呈现。

4. 完整代码

# 导入tensorflow
import tensorflow as tf
# 导入keras
from tensorflow import keras
# 引入内置手写体数据集mnist
from keras.datasets import fashion_mnist
# 引入绘制acc和loss曲线的库
import matplotlib.pyplot as plt
# 引入ANN的必要的类
from keras.layers import Dense, Dropout
from keras.models import Sequential
from keras import optimizers, losses, regularizers

"1.加载数据"
"""
x_train是fashion_mnist训练集图片,大小的28*28的,y_train是对应的标签是数字
x_test是fashion_mnist测试集图片,大小的28*28的,y_test是对应的标签是数字
"""
(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()  # 加载fashion_mnist数据集
print('mnist_data:', x_train.shape, y_train.shape, x_test.shape, y_test.shape)  # 打印训练数据和测试数据的形状

"2.数据预处理"


def preprocess(x, y):  # 数据预处理函数
    x = tf.cast(x, dtype=tf.float32) / 255.  # 将输入的图片进行归一化,从0-255变换到0-1
    x = tf.reshape(x, [28 * 28])
    """
    # 将输入图片的形状(60000,28,28)转换成(60000,28*28),
    相当于将图片拉直,便于输入给神经网络
    """
    y = tf.cast(y, dtype=tf.int32)  # 将输入图片的标签转换为int32类型
    y = tf.one_hot(y, depth=10)
    """
    # 将标签y进行独热编码,因为神经网络的输出是10个概率值,而y是1个数,
    计算loss时无法对应计算,因此将y进行独立编码成为10个数的行向量,然后进行loss的计算
    独热编码:例如数值1的10分类的独热编码是[0 1 0 0 0 0 0 0 0 0,即1的位置为1,其余位置为0
    """
    return x, y


batchsz = 128  # 每次输入给神经网络的图片数
"""
数据加载进入内存后,需要转换成 Dataset 对象,才能利用 TensorFlow 提供的各种便捷功能。
通过 Dataset.from_tensor_slices 可以将训练部分的数据图片 x 和标签 y 都转换成Dataset 对象
"""
db = tf.data.Dataset.from_tensor_slices((x_train, y_train))  # 构建训练集对象
db = db.map(preprocess).shuffle(60000).batch(batchsz)  # 将数据进行预处理,随机打散和批量处理
ds_val = tf.data.Dataset.from_tensor_slices((x_test, y_test))  # 构建测试集对象
ds_val = ds_val.map(preprocess).batch(batchsz)  # 将数据进行预处理,随机打散和批量处理

"3.构建网络模型"
model = Sequential([Dense(512, activation='relu'),
                      Dropout(0.2),
                      Dense(256, activation='relu'),
                      Dropout(0.2),
                      Dense(128, activation='relu'),
                      Dropout(0.2),
                      Dense(64, activation='relu'),
                      Dense(32, activation='relu'),
                      Dense(10)])
"""
构建了6层ANN网络,每层的神经元个数分别是512,256,128,64,32,10,
隐藏层的激活函数是relu,输出层的激活函数是sortmax
"""
model.build(input_shape=(None, 28 * 28))  # 模型的输入大小
model.summary()  # 打印网络结构

"4.模型编译"
model.compile(optimizer='Adam',
              loss=tf.keras.losses.CategoricalCrossentropy(from_logits=True),
              metrics=['accuracy']
                )
"""
模型的优化器是Adam,学习率是0.01,
损失函数是losses.CategoricalCrossentropy,
性能指标是正确率accuracy
"""

"5.模型训练"
history = model.fit(db, epochs=30, validation_data=ds_val, validation_freq=1)
"""
模型训练的次数是5,每1次循环进行测试
"""
"6.模型保存"
model.save('ann_fashion.h5')  # 以.h5文件格式保存模型

"7.模型评价"
model.evaluate(ds_val)  # 得到测试集的正确率

"8.模型测试"
sample = next(iter(ds_val))  # 取一个batchsz的测试集数据
x = sample[0]  # 测试集数据
y = sample[1]  # 测试集的标签
pred = model.predict(x)  # 将一个batchsz的测试集数据输入神经网络的结果
pred = tf.argmax(pred, axis=1)  # 每个预测的结果的概率最大值的下标,也就是预测的数字
y = tf.argmax(y, axis=1)  # 每个标签的最大值对应的下标,也就是标签对应的数字
print(pred)  # 打印预测结果
print(y)  # 打印标签数字

"9.模型训练时的可视化"
# 显示训练集和验证集的acc和loss曲线
acc = history.history['accuracy']  # 获取模型训练中的accuracy
val_acc = history.history['val_accuracy']  # 获取模型训练中的val_accuracy
loss = history.history['loss']  # 获取模型训练中的loss
val_loss = history.history['val_loss']  # 获取模型训练中的val_loss
# 绘值acc曲线
plt.figure(1)
plt.plot(acc, label='Training Accuracy')
plt.plot(val_acc, label='Validation Accuracy')
plt.title('Training and Validation Accuracy')
plt.legend()
# 绘制loss曲线
plt.figure(2)
plt.plot(loss, label='Training Loss')
plt.plot(val_loss, label='Validation Loss')
plt.title('Training and Validation Loss')
plt.legend()
plt.show()  # 将结果显示出来


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

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

相关文章

(202307)wonderful-sql:环境搭建(ubuntu 22.04 + mysql 8.0 + workbench/dbeavar,免密码-不建议免哈)

前言 能够再次参加datawhale组织的开源学习是十分兴奋的,看到datawhale能够越办越好我也是由衷地感到高兴。 这次参加的是mysql的学习,我知道这样短期的学习不会对我的能力造成多么大的提升,但是相信经过这次学习,我又将被datawh…

Kubernetes中Pod的扩缩容介绍

Kubernetes中Pod的扩缩容介绍 在实际生产系统中,我们经常会遇到某个服务需要扩容的场景,也可能会遇到由于资源紧张或者工作负载降低而需 要减少服务实例数量的场景。此时可以利用 Deployment/RC 的 Scale 机制来完成这些工作。 Kubernetes 对 Pod 的扩…

java代码审计1之环境搭建

文章目录 1、安装jdk2、配置tomcat3、配置maven3.1、配置环境变量3.2、配置源和maven配置文件 4、idea4.1、配置maven4.2、新建web项目4.3、遇到的问题(弹出404页面) 之前的文章, https://blog.csdn.net/weixin_43970718/article/details/121929434 https://blog.…

(全网最详细!)mysql、redis 、RabbitMQ只能本机访问,怎么改?

如果只能本机访问,怎么改? 一、mysql - 改my.ini 刷脚本 bind-address0.0.0.0 然后重启一下mysql服务 任务管理器-关掉mysql 搜索 计算机管理-重启mysql服务 然后 打开查询,并选择mysql数据,输入这个sql语句,点击运行 sele…

POC!VMWare RCE CVE-2023-20887

漏洞简介 VMWare Aria Operations for Networks (vRealize Network Insight) 在通过 Apache Thrift RPC 接口接受用户输入时容易受到命令注入的攻击。此漏洞允许远程未经身份验证的攻击者以 root 用户身份在底层操作系统上执行任意命令。RPC 接口受可以绕过的反向代理保护。VM…

vue3+vue-router4:报错Uncaught (in promise) Error: Invalid navigation guard

报错图示: Error: Invalid navigation guard Uncaught (in promise) Error: Invalid navigation guard 错误影响描述: 配置开发、测试、生产时候,因为是公众号,所以想在开发环境下免鉴权,不走微信获取openid接口&a…

PHP要怎么学--【思维导图知识范围】

强撸项目 总目录在此 专辑工作量PHP登陆/php登录–【强撸项目】难度★✫✰✰✰PHP注册/登录/发邮件–【强撸项目】★★★✫✰PHP在线相册–【强撸项目】★★★★✫–【强撸项目】––【强撸项目】––––– 文章目录 本系列校训学习资源的选择环境的问题本人推荐 PHP视频的知…

C语言-分支语句和循环

目录 【1】字符输入输出 【2】C语言下的垃圾字符回收 【3】分支语句 【4】循环 练习: 【1】字符输入输出 按字符的输入输出 int getchar(void); 功能:从终端输入一个字符 参数:无 返回值:输入字符的ASCII值int putchar(int…

pandas常用方法

一、提要 pandas对于处理表格类数据来说是非常方便的模块,同时也是做数据分析绕不开的第三方库。这里将工作中常用到的各种处理方法记录下来二、常用方法 接下来的以 df 表示我们要处理的 dataframe 表格数据 1、取值 # 循环遍历取值 for i in range(len(df)):y…

Spring Cloud之Gateway网关应⽤

使⽤⽹关对静态化微服务进⾏代理(添加在它的上游,相当于隐藏了具体微服务的信息,对外暴露的是⽹关)。 1. 右键⽗⼯程【 yx-parent 】选择【 New 】 - 【 Module 】选项,然后选择创建【 Maven 】类型项⽬(不…

以高质量产业载体为底色,绘就珠海高新区产业发展新图景

【作者】珠海高新招商 “珠海高新招商”以招商运营为核心,聚焦珠海工业园区、珠海5.0产业园等招商引资工作,依托专业的招商团队和丰富的创新资源,为企业提供产业园入驻、平台搭建、产业政策咨询、科技服务等全流程专业服务。推动高新区招商引…

17 数组动态初始化

动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。 格式:数据类型[] 数组名 new 数据类型[数组长度] package demo;public class Demo11 {public static void main(String[] args) {// 动态初始化数组:数据类型[] 数…

日撸java三百行day77-80

文章目录 说明GUI1. GUI 总体布局2. GUI 代码理解2.1 对话框相关控件2.1.1 ApplicationShowdown.java(关闭应用程序)2.1.2 DialogCloser.java(关闭对话框)2.1.3 ErrorDialog.java(显示错误信息)2.1.4 HelpD…

深度学习模型量化、剪枝、压缩

fp16是指采用2字节(16位)进行编码存储的一种数据类型; fp32是指采用4字节(32位); fp16和fp32相比对训练的优化: 1.内存占用减少:应用fp16内存占用比原来更小,可以设置更大的batch_size 2.加速计算:加速…

CentOS5678 repo源 阿里云/腾讯云开源镜像站 repo 地址

CentOS5678 repo 地址 阿里云开源镜像站 https://mirrors.aliyun.com/repo/ CentOS5678 repo 地址 腾讯云开源镜像站 http://mirrors.cloud.tencent.com/repo/ CentOS-5.repo https://mirrors.aliyun.com/repo/Centos-5.repo [base] nameCentOS-$releasever - Base - mirror…

DuDuTalk :做4G智能工牌领域标杆品牌,用语音智能构建完美沟通

数字经济高速发展,AI 成为数字经济时代的核心生产力,驱动数字经济纵深发展,在此情境下,作为AI基石的语音数据价值也在不断释放。企业纷纷加强对客服、营销等服务和销售资源部门的投入,试图从语音数据入手,利…

如何使用windows搭建WebDAV服务,并内网穿透公网访问【无公网IP】

文章目录 windows搭建WebDAV服务,并内网穿透公网访问【无公网IP】1. 安装IIS必要WebDav组件2. 客户端测试3. 使用cpolar内网穿透,将WebDav服务暴露在公网3.1 打开Web-UI管理界面3.2 创建隧道3.3 查看在线隧道列表3.4 浏览器访问测试 4. 安装Raidrive客户…

NodeJS实现支付宝沙箱支付 ②③

文章目录 前言版权声明Alipay SDK 沙箱环境简介Node环境要求沙箱环境配置下载所需模块准备前端静态页面以及Node服务器文件夹规范AlipaySdk 配置准备AlipaySdk 代码演示 Alipay实例化 ~ alipay.sdk 文件 AlipayForm ~ alipayForm文件 AlipayFormStatus ~ alipayForm文件 …

deeplabv3+源码之慢慢解析 第四章network文件夹(1)backbone文件夹(a1)hrnetv2.py--4个函数和可执行代码

系列文章目录(更新中) 第一章deeplabv3源码之慢慢解析 根目录(1)main.py–get_argparser函数 第一章deeplabv3源码之慢慢解析 根目录(2)main.py–get_dataset函数 第一章deeplabv3源码之慢慢解析 根目录(3)main.py–validate函数 第一章deeplabv3源码之慢…

使用NRF52840 USB Dongle进行Wireshark蓝牙抓包

一、搭建软硬件环境 1.1、准备NRF52840 USB Dongle一个: 1.2、下载Wireshark软件 https://2.na.dl.wireshark.org/win64/Wireshark-win64-4.0.7.exe 1.3、下载Nodic官方解析工具包 nRF Sniffer for Bluetooth LE - Downloads - nordicsemi.com 1.4、下载Python P…