88、使用tensorboard进行可视化学习,查看具体使用时间,训练轮数,使用内存大小...

本文详细介绍了一种使用TensorFlow实现的手写数字识别系统。该系统基于MNIST数据集进行训练,采用多层神经网络结构,并利用滑动平均、正则化等技术提升模型泛化能力。文章深入探讨了模型的训练过程,包括参数设置、优化方法及损失函数计算。

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

'''
Created on 2017年5月23日

@author: weizhen
'''
import os
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
# minist_inference中定义的常量和前向传播的函数不需要改变,
# 因为前向传播已经通过tf.variable_scope实现了计算节点按照网络结构的划分
import mnist_inference
from mnist_train import MOVING_AVERAGE_DECAY, REGULARAZTION_RATE, \
    LEARNING_RATE_BASE, BATCH_SIZE, LEARNING_RATE_DECAY, TRAINING_STEPS, MODEL_SAVE_PATH, MODEL_NAME
INPUT_NODE = 784
OUTPUT_NODE = 10
LAYER1_NODE = 500
def train(mnist):
    # 将处理输入数据集的计算都放在名子为"input"的命名空间下
    with tf.name_scope("input"):
        x = tf.placeholder(tf.float32, [None, mnist_inference.INPUT_NODE], name='x-input')
        y_ = tf.placeholder(tf.float32, [None, mnist_inference.OUTPUT_NODE], name='y-cinput')
    regularizer = tf.contrib.layers.l2_regularizer(REGULARAZTION_RATE)
    y = mnist_inference.inference(x, regularizer)
    global_step = tf.Variable(0, trainable=False)
    
    # 将滑动平均相关的计算都放在名为moving_average的命名空间下
    with tf.name_scope("moving_average"):
        variable_averages = tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECAY, global_step)
        variable_averages_op = variable_averages.apply(tf.trainable_variables())
    
    # 将计算损失函数相关的计算都放在名为loss_function的命名空间下
    with tf.name_scope("loss_function"):
        cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y, labels=tf.argmax(y_, 1))
        cross_entropy_mean = tf.reduce_mean(cross_entropy)
        loss = cross_entropy_mean + tf.add_n(tf.get_collection('losses'))
        
    # 将定义学习率、优化方法以及每一轮训练需要执行的操作都放在名子为"train_step"的命名空间下
    with tf.name_scope("train_step"):
        learning_rate = tf.train.exponential_decay(LEARNING_RATE_BASE,
                                                 global_step,
                                                 mnist.train._num_examples / BATCH_SIZE,
                                                 LEARNING_RATE_DECAY,
                                                 staircase=True)
        train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss, global_step=global_step)
    
    with tf.control_dependencies([train_step, variable_averages_op]):
        train_op = tf.no_op(name='train')
    
    # 训练模型。
    with tf.Session() as sess:
        tf.global_variables_initializer().run()
        for i in range(TRAINING_STEPS):
            xs, ys = mnist.train.next_batch(BATCH_SIZE)

            if i % 1000 == 0:
                # 配置运行时需要记录的信息。
                run_options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE)
                # 运行时记录运行信息的proto。
                run_metadata = tf.RunMetadata()
                _, loss_value, step = sess.run(
                    [train_op, loss, global_step], feed_dict={x: xs, y_: ys},
                    options=run_options, run_metadata=run_metadata)
                print("After %d training step(s), loss on training batch is %g." % (step, loss_value))
                writer = tf.summary.FileWriter("/log/modified_mnist_train.log", tf.get_default_graph())
                writer.add_run_metadata(run_metadata, "stop%03d" % i)
                writer.close()
                print("After %d training steps(s),loss on training batch is %g."%(step,loss_value))
            else:
                _, loss_value, step = sess.run([train_op, loss, global_step], feed_dict={x: xs, y_: ys})
    # 初始化Tensorflow持久化类
    # saver = tf.train.Saver()
    # with tf.Session() as sess:
    #    tf.global_variables_initializer().run()
    #    
        # 在训练过程中不再测试模型在验证数据上的表现,验证和测试的过程将会有一个独立的程序来完成
    #    for i in range(TRAINING_STEPS):
    #        xs, ys = mnist.train.next_batch(BATCH_SIZE)
    #        _, loss_value, step = sess.run([train_op, loss, global_step], feed_dict={x:xs, y_:ys})
            
            # 每1000轮保存一次模型
    #        if i % 1000 == 0:
                # 输出当前训练情况。这里只输出了模型在当前训练batch上的损失函数大小
                # 通过损失函数的大小可以大概了解训练的情况。在验证数据集上的正确率信息
                # 会有一个单独的程序来生成
    #            print("After %d training step(s),loss on training batch is %g" % (step, loss_value))
                
                # 保存当前的模型。注意这里给出了global_step参数,这样可以让每个被保存模型的文件末尾加上训练的轮数
                # 比如"model.ckpt-1000"表示训练1000轮之后得到的模型
    #            saver.save(sess, os.path.join(MODEL_SAVE_PATH, MODEL_NAME), global_step=global_step)
    
                # 将当前的计算图输出到TensorBoard日志文件
    #            writer=tf.summary.FileWriter("/path/to/log",tf.get_default_graph())
    #            writer.close()
    

def main(argv=None):
    mnist = input_data.read_data_sets("/tmp/data", one_hot=True)
    train(mnist)

if __name__ == '__main__':
    tf.app.run()

转载于:https://www.cnblogs.com/weizhen/p/6902210.html

<think>我们正在处理用户关于在PyCharm中使用Python配置和检测YOLOv8训练数据集的问题。根据用户提供的引用内容,我们知道YOLOv8需要配置数据集路径、模型配置文件、预训练权重以及训练轮数等参数。 步骤概述: 1. 创建PyCharm项目并配置环境 2. 安装必要的库(包括ultralytics) 3. 准备数据集(按照YOLOv8要求的格式) 4. 编写配置文件和训练脚本 5. 运行训练并检测训练结果 详细步骤: 1. 创建PyCharm项目并配置环境 - 打开PyCharm,创建一个新项目。 - 设置Python解释器(建议使用Python 3.7或更高版本)。 2. 安装必要的库 - 在PyCharm的终端中运行: ```bash pip install ultralytics ``` 这将安装YOLOv8所需的库。 3. 准备数据集 - YOLOv8要求的数据集格式是:每个图像对应一个.txt标注文件,标注格式为:`class_id center_x center_y width height`(归一化到0-1)。 - 数据集目录结构建议如下: ``` datasets/ ├── apple/ │ ├── images/ │ │ ├── train/ │ │ └── val/ │ └── labels/ │ ├── train/ │ └── val/ └── apple.yaml # 数据集配置文件 ``` - 创建数据集配置文件`apple.yaml`(示例内容): ```yaml # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] path: ../datasets/apple # dataset root dir train: images/train # train images (relative to 'path') val: images/val # val images (relative to 'path') test: # test images (optional) # Classes names: 0: apple ``` 4. 编写训练脚本 - 在PyCharm项目中创建一个Python文件(如`train.py`)。 - 编写代码: ```python from ultralytics import YOLO # 加载模型(使用训练权重) model = YOLO('yolov8n.pt') # 加载预训练模型(建议从ultralytics仓库下载) # 训练模型 results = model.train( data='datasets/apple/apple.yaml', # 数据集配置文件路径 epochs=100, # 训练轮数 imgsz=640 # 输入图像尺寸 ) ``` 5. 运行训练 - 在PyCharm中运行`train.py`。 - 训练过程中,模型会自动下载预训练权重(如果本地没有)并开始训练。 - 训练日志和模型权重将保存在`runs/detect/train`目录下。 6. 检测训练结果(使用训练好的模型进行预测) - 训练完成后,可以编写一个预测脚本(如`predict.py`): ```python from ultralytics import YOLO # 加载训练好的模型 model = YOLO('runs/detect/train/weights/best.pt') # 最佳模型权重 # 预测图像 results = model.predict('datasets/apple/images/val/apple1.jpg', save=True) ``` - 运行后,预测结果将保存在`runs/detect/predict`目录下。 注意事项: - 确保数据集路径正确,特别是相对路径。 - 如果遇到预训练权重下载问题,可以手动下载(如`yolov8n.pt`)并放在项目目录下,然后修改代码为本地路径。 - 训练参数(如`epochs`、`batch_size`等)可根据需要调整。 以上步骤应该能够帮助用户在PyCharm中配置和检测YOLOv8训练数据集。 §§相关问题§§ 1. 如何准备YOLOv8所需的数据集格式? 2. YOLOv8训练过程中常见的参数有哪些,如何调整? 3. 如何评估YOLOv8训练后的模型性能?</think>### 在PyCharm中配置和检测YOLOv8训练数据集的完整指南 #### **1. 环境配置** 1. **创建虚拟环境** - 在PyCharm中新建项目,创建Python 3.8+虚拟环境(推荐Python 3.9) - 打开终端安装依赖: ```bash pip install ultralytics torch torchvision opencv-python ``` 2. **准备数据集** - 按YOLOv8要求组织数据集目录: ``` datasets/ └── apple/ ├── images/ │ ├── train/ # 训练集图片 │ └── val/ # 验证集图片 └── labels/ ├── train/ # 训练集标注文件(.txt) └── val/ # 验证集标注文件(.txt) ``` - 标注格式:`class_id center_x center_y width height`(归一化坐标) 3. **创建数据集配置文件** - 新建`apple.yaml`文件: ```yaml path: datasets/apple # 数据集根目录 train: images/train # 训练集路径 val: images/val # 验证集路径 names: 0: apple # 类别名称 ``` #### **2. 模型训练** 1. **创建训练脚本** (`train.py`) ```python from ultralytics import YOLO # 加载预训练模型 model = YOLO("yolov8n.pt") # 官方预训练权重 [^2] # 开始训练 results = model.train( data="datasets/apple/apple.yaml", # 数据集配置 epochs=100, # 训练轮数 imgsz=640, # 图像尺寸 batch=16, # 批次大小 name="apple_detection" # 实验名称 ) ``` **关键参数说明**: - `pretrained=True`:加载预训练权重 - `optimizer="auto"`:自动选择优化器 - `lr0=0.01`:初始学习率 2. **运行训练** - 在PyCharm中右键运行`train.py` - 训练日志实时输出,权重保存在`runs/detect/apple_detection/weights/best.pt` #### **3. 训练结果检测** 1. **创建检测脚本** (`detect.py`) ```python from ultralytics import YOLO import cv2 # 加载训练好的模型 model = YOLO("runs/detect/apple_detection/weights/best.pt") # 单张图片检测 results = model.predict( source="datasets/apple/images/val/apple_1.jpg", save=True, # 保存结果 conf=0.5, # 置信度阈值 show_labels=True # 显示标签 ) # 实时摄像头检测 cap = cv2.VideoCapture(0) while cap.isOpened(): ret, frame = cap.read() results = model.track(frame, persist=True) # 持续跟踪 annotated_frame = results[0].plot() cv2.imshow("Detection", annotated_frame) if cv2.waitKey(1) == 27: # ESC退出 break ``` #### **4. 常见问题解决** - **数据集路径错误**:确保`apple.yaml`中的路径是相对项目根目录的路径 - **CUDA内存不足**:减小`batch`大小(如改为8或4) - **标注文件缺失**:验证每个图片是否有对应的.txt标注文件 - **类别不匹配**:检查`apple.yaml`中`names`的类别ID是否与标注文件一致 #### **5. 结果可视化** 1. **训练指标查看** - 训练后自动生成`results.csv`(精度/召回率曲线) - 使用TensorBoard: ```bash tensorboard --logdir runs/detect ``` 2. **预测结果位置** - 检测输出保存在`runs/detect/predict/` - 包含带标注框的图片和置信度分数 > 提示:YOLOv8官方推荐使用`yolov8n.yaml`定义模型结构,配合`yolov8n.pt`预训练权重进行迁移学习[^2]。训练数据集的配置需通过`apple.yaml`文件精确指定路径和类别[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值