比赛准备笔记 --- TensotFlow、软件调试、数据预处理(图像,csv数据)

本文介绍了TensorFlow,Google开发的开源深度学习框架,强调其Python接口、强大的计算能力和tf.keras库,包括Sequential、Dense等层的使用。还涵盖了模型构建的不同方式,如Sequential模型、函数式API和子类化模型,以及图像预处理和调试流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

TensorFlow是由Google团队开发的一个开源深度学习框架,完全基于Python语言设计。它的初衷是以最简单的方式实现机器学习和深度学习的概念,结合了计算代数的优化技术,使计算许多数学表达式变得简单。

优势:

  • 强大的计算能力,支持多种硬件和分布式计算
  • 灵活的数据流模型,便于构建复杂的模型
  • 丰富的 社区资源和生态系统

tf.keras库

该库是一个高阶api库,提供了很多训练模型时需要使用的工具

tf.keras.models.Sequential:用于顺序地堆叠模型的各个层。
tf.keras.layers.Dense:用于定义全连接层。
tf.keras.layers.Flatten:用于将多维数组转换为一维数组。
tf.keras.losses:提供了各种损失函数。
tf.keras.optimizers:提供了优化器。
tf.keras.metrics:提供了评估指标,如准确率、精确率等

构建模型的方式

  • Sequential 模型:使用 tf.keras.Sequential 类可以按顺序堆叠层来构建模型。这是一种简单的模型构建方式,适用于层之间是线性关系的情况
  • 函数式 API:使用函数式 API 可以构建更复杂、具有分支和合并的模型结构。这种方式允许你创建具有多个输入和输出的模型
  • 子类化模型:通过继承 tf.keras.Model 类,并自定义 init 和 call 方法来构建模型。这种方式提供了更大的灵活性,可自定义模型的计算图

使用Sequential 构建模型

import tensorflow as tf
# Sequential 模型
model = tf.keras.models.Sequential([
    # tf.keras.layers.Dense 构建全连接层 64表示数据类型unit64 relu表示激活函数
    tf.keras.layers.Dense(64,activation="relu",input_shape=(784,)),
    tf.keras.layers.Dense(64,activation="relu"),
    tf.keras.layers.Dense(10,activation="softmax"),
])

# 编译模型
model.compile(optimizer="adam", # 指定优化器
              loss="sparse_categorical_crossentropy", # 指定损失函数
              metrics=['accuracy']  # 指定评估指标
              )
  • 开始训练
# 开始训练
history = model.fit(
    train_data_x, # 训练数据集
    validation_data = test_data_x,  # 验证集
    epochs=10 # 根据需要设置训练轮数
)

model.evaluate(test_data_y)  # 使用测试集测试模型


这样可以降低测试集的损失和收敛情况,以保证模型不容易过拟合

拿到代码之后修改算法的几种方案

  • 第一种:多加几层卷积层、池化层和全连接层
tf.teras.Sequential([
	layers.lambda((lambda x : tf_fn(
		process_base64_image,x,
		fn_output_signaturetf.TensorSpec(shape=(int(img_height),int(img_width),3),dtype=tf.float32)
		)
		),
		name="image_decode_png"
		),
	layers.ConV2D(32,(3,3),activation='relu'),
	layers.MaxPooling2D(2,2),
	layers.ConV2D(64,(3,3),activation='relu'),
	layers.MaxPooling2D(2,2),
	layers.ConV2D(128,(3,3),activation='relu')
	layers.Flatten(),
	layers.Dense(128,activation='relu'),
	layers.Dense(class_nums,activation="softmax")
])
  • 第二种:使用vgg网络
from tensorflow.keras.applications.vgg16 import VGG16 
# 构建vgg16网络并使其预置参数冻结
base_model = VGG16(weights="imagenet",include_top=False,input_shape=(int(img_height),int(image_width,3)))
for layer in base_model.layers:
	layer.trainable = False

input_layer = base_model.input # 获取vgg的输入层
x = layers.Flatten()(input_layer)
x = layers.Dense(128,activation='relu')(x)
outputs = layers.Dense(class_nums,activation="softmax")(x)

# 构建完整的模型
tf.keras.Sequential([
	layers.lambda(),
	base_model,
	outputs
])

  • 第三种:使用残差网络
from tensorflow.keras.applications.resnet50 import ResNet50
# 构建ResNet50模型并使其预置参数冻结

base_model = ResNet50(weights='imagenet',include_top=False,input_shape=(int(img_height),int(img_width),3))
for layer in base_model.layers:
	layer.trainable = False
	

x = base_model.output
x = layers.GlobalAveragePoolMax2D()(x)
x = layers.Dense(1024,activation='relu')(x)
output = layers.Dense(class_nums,activation='sotfmax')(x)

# 构建完整模型
model = tf.keras.Sequential([
	layers.lambda(),
	base_model,
	output
])

模型导出

# 模型导出
import pytz
from datetime import datetime
model_version = datetime.now(pytz.timezone("Asia/Shanghai")).strftime("%Y%m%d%H%M%S")

tf.keras.models.save_model(model,f'/model/slot1/{model_version}',overwrite=True)

模型的使用(部署)

导出模型之后就需要使用这个模型,一共有两种方法来使用这个模型

  1. TensotFlow-Serving
  2. 使用tf自带的包加载

本帖只讲解TensorFlow-Serving使用模型的方式

TensorFlow-Serving是一种灵活的高性能服务系统,适用于机器学习模型,专为生产环境而设计。TensotFlow Serving 可以轻松部署新算法和实验,同时保持相同的服务器架构和构。TensorFlow-Serving提供与TensorFlow模型的开箱即用集成,但可以轻松扩展以提供类型的模型和数据。

重点:通过api部署

TensorFlow中的图像预处理

有一些图像预处理的方法是万能通用的:

  • 归一化处理
    将像素值缩放到0到1之间,或者-1到1之间,以消除由于光照条件不同而导致的亮度差异。这可以通过减去所有像素值的平均值,然后除以标准差来实现

  • 数据增强

通过旋转、翻转、平移、裁剪等操作来增加数据集的大小,从而提高模型的泛化能力。

import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator

# 创建一个ImageDataGenerator对象,设置旋转、翻转、平移等操作
datagen = ImageDataGenerator(
    rotation_range=40,  # 随机旋转角度范围
    width_shift_range=0.2,  # 水平平移范围
    height_shift_range=0.2,  # 垂直平移范围
    shear_range=0.2,  # 剪切强度
    zoom_range=0.2,  # 缩放范围
    horizontal_flip=True,  # 是否进行水平翻转
    fill_mode='nearest'  # 填充新创建像素的方法
)

# 加载图片
img = tf.keras.preprocessing.image.load_img('R.jpg')
x = tf.keras.preprocessing.image.img_to_array(img)
x = x.reshape((1,) + x.shape)

# 使用ImageDataGenerator生成增强后的图片
i = 0
for batch in datagen.flow(x, batch_size=1):
    i += 1
    if i > 20:  # 生成20张增强后的图片
        break
    image = tf.keras.preprocessing.image.array_to_img(batch[0])
    image.save('save/augmented_image_' + str(i) + '.jpg')

图片处理方式及其理由

  • 将图像转换为灰度图
    理由:将彩色图像转为灰度图像,可以减少数据量,简化计算,降低图像处理的复杂度,提高图像的处理速度和准确性。
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  
  • 增强图像对比度
    理由: 图像对比度提高,图像中的物体边缘和细节就会变得容易识别,从而提高图像识别和分析的准确性
alpha = 1.5   
beta = 0    
img = cv2.convertScaleAbs(gray_img, alpha=alpha, beta=beta)  
  • 锐化图像
    理由:锐化图像可以增强图像的边缘和细节,提高图像的清晰度和对比度,从而可能提高模型准确度。
kernel = np.array([[0, -1, 0], [-1, 5,-1], [0, -1, 0]])
img = cv2.filter2D(img, -1, kernel)

软件调试流程

进入到Kimage软件之后就是点击设备 (从左往右数第三个)
在这里插入图片描述
点击比赛使用的设备
在这里插入图片描述
点击回原点
在这里插入图片描述
移动点位,将画板移动到笔的正下方,笔尖轻触画纸
在这里插入图片描述

调整完毕后,点击第二个按钮进入主流程
在这里插入图片描述
点击初始位置,改变画笔下降高度为刚刚轻触在纸上的高度 速度调到50
在这里插入图片描述
进入MVVIEWER软件 网口配置好之后连接摄像头 在连接的同时调整亮度,保证在软件中看的清楚图像的画面在这里插入图片描述

打开图像识别客户端 查看配置可以看到图像识别客户端所在的网口 是2网段,所以工控机和相机连接的网口也一定是要2网段在这里插入图片描述

在自己电脑运行虚拟机 并且在浏览器中进入大数据平台
在这里插入图片描述
在图像检测客户端中点击开始 运行训练模式
在这里插入图片描述
相机会拍摄四张照片
在这里插入图片描述
接着人工截取四个工件并标记合格与不合格

点击提交(提交前要更换下一张纸)

训练完成后就可以在云平台查看标注的图片数据 也可以用程序根据接口在这里插入图片描述
访问查找数据

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冲鸭嘟嘟可

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值