ChatGPT初尝试——合并Excel表格【AI版】

news2024/11/17 17:48:39

ChatGPT真的能提升生产力吗?【AI版】

  • 无意间的刷到的视频
  • 一、提需求
  • 二、ChatGPT用Python编写代码
  • 三、意外的解释
  • 四、ChatGPT改用Java编写代码
  • 五、GPT第二次生成Java代码
  • 尾巴

无意间的刷到的视频

晚上在家刷视频,突然看到一个在讲关于AI编程的视频,心里疑问:真的假的,这么厉害的吗?于是我看完他的讲解和操作,他这个视频中确实用ChatGPT实现了他所提出的要求,编写了一段代码,当然,up主要求用的Python编写的,我不知道用C++或者Java行不行得通,接下来我就亲自使用以下ChatGPT,验验货。
开图

一、提需求

我需要将给定文件夹中的所有Excel表数据,汇总到一个给定的Excel表中,请按照以下要求,
编写Python:
一、每个分表中有两个sheet,第一个是班级基本信息,第二个是班级学生成绩排名;
二、班级基本信息sheet中,班级编号、教师姓名、班级人数、班长,教师姓名;
三、班级成绩排名sheet中,第一列是序号、第二列是学号、第三列是学生姓名、第四列是成绩;
四、总表只需要一个sheet,并且需将列设置为序号、班级编号、教师姓名、班级人数、班长、学号、学生姓名、成绩;
五、班级编号、教师姓名、班级人数,必须要和每个学生的成绩信息一一对应;
六、做一个程序运行进度条,表示已复制到的学生条目数。

二、ChatGPT用Python编写代码

下面是使用GPT的截图:

需求

代码01

生成代码如下:

import os
import openpyxl
from tqdm import tqdm

# 定义常量
BASE_DIR = 'path/to/folder'  # 文件夹路径
OUTPUT_FILE = 'path/to/output.xlsx'  # 输出文件路径
SHEET_NAMES = ['基本信息', '成绩排名']  # sheet名称
HEADER_ROWS = [1, 1]  # 表头所在行数
HEADER_COLS = [1, 1]  # 表头所在列数
CLASS_INFO_COLS = [1, 2, 3, 4, 2]  # 班级基本信息所在列数
RANK_COLS = [1, 2, 3, 4]  # 成绩排名所在列数

# 初始化输出文件
output_wb = openpyxl.Workbook()
output_ws = output_wb.active
output_ws.append(['序号', '班级编号', '教师姓名', '班级人数', '班长', '学号', '学生姓名', '成绩'])

# 遍历文件夹中的Excel文件
for filename in tqdm(os.listdir(BASE_DIR)):
    if not filename.endswith('.xlsx'):
        continue
    
    # 打开文件
    filepath = os.path.join(BASE_DIR, filename)
    wb = openpyxl.load_workbook(filepath)
    
    # 遍历sheet
    for i, sheet_name in enumerate(SHEET_NAMES):
        ws = wb[sheet_name]
        
        # 获取表头
        header_row = HEADER_ROWS[i]
        header_col = HEADER_COLS[i]
        header = [cell.value for cell in ws[header_row] if cell.value]
        
        # 获取班级基本信息
        if sheet_name == '基本信息':
            class_info = [ws.cell(row=header_row+1, column=col).value for col in CLASS_INFO_COLS]
        
        # 获取成绩排名
        elif sheet_name == '成绩排名':
            for row in range(header_row+1, ws.max_row+1):
                rank = [ws.cell(row=row, column=col).value for col in RANK_COLS]
                output_ws.append([output_ws.max_row, *class_info, *rank])
    
    wb.close()

# 保存输出文件
output_wb.save(OUTPUT_FILE)

这还不是最厉害的

三、意外的解释

更令人惊讶的是还会对代码进行解释,这就不得了了。接下来看看GPT对它所生成代码的解释:
解释一下代码的主要部分:

  1. 第1行导入了必要的模块,其中os用于文件操作,openpyxl用于读写Excel文件,tqdm用于显示进度条。
  2. 第5-9行定义了常量,包括文件夹路径、输出文件路径、sheet名称等。
  3. 第12-19行初始化输出文件,创建一个新的Excel文件,并在第一个sheet中添加表头。
  4. 第22-42行遍历文件夹中的Excel文件,打开每个文件并遍历其中的sheet。
  5. 第25-27行判断当前sheet是班级基本信息还是成绩排名,分别获取表头和班级基本信息。
  6. 第30-37行在成绩排名sheet中遍历每一行,获取学生的成绩信息,并将班级基本信息和成绩信息合并到输出文件中。
  7. 第40-41行关闭当前文件。
  8. 第44-46行保存输出文件。
    其中使用了tqdm模块来显示进度条,可以让程序更加友好。如果没有安装该模块,可以使用以下命令进行安装:
pip install tqdm

这个效果非常不错了,如果运行上述代码有误,还可以复制错误提示让GPT分析并解决问题,可以说是保姆级别的开发助手了。

四、ChatGPT改用Java编写代码

本来到这里视频里up主就结束的,我又想了一下,能否用Java语言实现出来,于是就开始给GPT命令,很简单,只需把需求描述里的Python改为Java即可:
改为Java语言编写代码

生成代码如下:

import java.io.File;
import java.io.IOException;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

public class ExcelMerger {

    public static final String BASE_DIR = "path/to/folder"; // 文件夹路径
    public static final String OUTPUT_FILE = "path/to/output.xlsx"; // 输出文件路径
    public static final String[] SHEET_NAMES = {"基本信息", "成绩排名"}; // sheet名称
    public static final int[] HEADER_ROWS = {0, 0}; // 表头所在行数
    public static final int[] HEADER_COLS = {0, 0}; // 表头所在列数
    public static final int[] CLASS_INFO_COLS = {0, 1, 2, 3, 1}; // 班级基本信息所在列数
    public static final int[] RANK_COLS = {0, 1, 2, 3}; // 成绩排名所在列数

    public static void main(String[] args) {
        // 初始化输出文件
        Workbook outputWb = new XSSFWorkbook();
        Sheet outputWs = outputWb.createSheet("汇总数据");
        Row headerRow = outputWs.createRow(0);
        headerRow.createCell(0).setCellValue("序号");
        headerRow.createCell(1).setCellValue("班级编号");
        headerRow.createCell(2).setCellValue("教师姓名");
        headerRow.createCell(3).setCellValue("班级人数");
        headerRow.createCell(4).setCellValue("班长");
        headerRow.createCell(5).setCellValue("学号");
        headerRow.createCell(6).setCellValue("学生姓名");
        headerRow.createCell(7).setCellValue("成绩");

        // 遍历文件夹中的Excel文件
        File folder = new File(BASE_DIR);
        File[] files = folder.listFiles();
        int rowNum = 1; // 当前行号
        for (File file : Objects.requireNonNull(files)) {
            if (!file.isFile() || !file.getName().endsWith(".xlsx")) {
                continue;
            }

            try {
                // 打开文件
                Workbook wb = new XSSFWorkbook(file);
                for (int i = 0; i < SHEET_NAMES.length; i++) {
                    Sheet sheet = wb.getSheet(SHEET_NAMES[i]);
                    if (sheet == null) {
                        continue;
                    }

                    // 获取表头
                    int headerRowNum = HEADER_ROWS[i];
                    int headerColNum = HEADER_COLS[i];
                    Row headerRow = sheet.getRow(headerRowNum);
                    List<String> header = new ArrayList<>();
                    for (int j = headerColNum; j < headerRow.getLastCellNum(); j++) {
                        Cell cell = headerRow.getCell(j);
                        if (cell != null && cell.getCellType() == CellType.STRING) {
                            header.add(cell.getStringCellValue());
                        } else {
                            header.add("");
                        }
                    }

                    // 获取班级基本信息
                    if (SHEET_NAMES[i].equals("基本信息")) {
                        Row classInfoRow = sheet.getRow(headerRowNum + 1);
                        String classId = classInfoRow.getCell(CLASS_INFO_COLS[0]).getStringCellValue();
                        String teacherName = classInfoRow.getCell(CLASS_INFO_COLS[1]).getStringCellValue();
                        int studentCount = (int) classInfoRow.getCell(CLASS_INFO_COLS[2]).getNumericCellValue();
                        String monitor = classInfoRow.getCell(CLASS_INFO_COLS[3]).getStringCellValue();
                        for (int j = 4; j < header.size(); j++) {
                            if (header.get(j).equals("教师姓名")) {
                                header.set(j, teacherName);
                            }
                        }
                        for (int j = 1; j <= studentCount; j++) {
                            Row outputRow = outputWs.createRow(rowNum++);
                            outputRow.createCell(0).setCellValue(outputRow.getRowNum());
                            outputRow.createCell(1).setCellValue(classId);
                            outputRow.createCell(2).setCellValue(teacherName);
                            outputRow.createCell(3).setCellValue(studentCount);
                            outputRow.createCell(4).setCellValue(monitor);
                        }
                    }

                    // 获取成绩排名
                    else if (SHEET_NAMES[i].equals("成绩排名")) {
                        for (int j = headerRowNum + 1; j <= sheet.getLastRowNum(); j++) {
                            Row rankRow = sheet.getRow(j);
                            String studentId = rankRow.getCell(RANK_COLS[1]).getStringCellValue();
                            String studentName = rankRow.getCell(RANK_COLS[2]).getStringCellValue();
                            double score = rankRow.getCell(RANK_COLS[3]).getNumericCellValue();
                            Row outputRow = outputWs.createRow(rowNum++);
                            outputRow.createCell(0).setCellValue(outputRow.getRowNum());
                            for (int k = 1; k < header.size(); k++) {
                                if (header.get(k).equals("学号")) {
                                    outputRow.createCell(k).setCellValue(studentId);
                                } else if (header.get(k).equals("学生姓名")) {
                                    outputRow.createCell(k).setCellValue(studentName);
                                } else if (header.get(k).equals("成绩")) {
                                    outputRow.createCell(k).setCellValue(score);
                                }
                            }
                        }
                    }
                }

                wb.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        // 保存输出文件
        try {
            outputWb.write(outputFile);
            outputWb.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

本来接下来ChatGPT是输出解释上述生成代码的主要含义的,但它这句话还没说完输出就中断了,下面是对话截图:
Java代码主要内容解释

于是我不得不自己输入命令来让它解释,结果可能我输入的命令不是很具体,它把每段代码输出下来,然后再对该段代码解释。我想要的是和它用Python编写代码时解释代码含义的格式一样,就是说几行到第几行,然后再解释。于是我再把命令输入详细点,如下图:
详细命令
这样解释就对了,如下:

  1. 第2-4行:导入所需的类和定义常量。

  2. 第6-13行:创建输出文件,并创建表头。其中,第9-11行根据要求创建了表头的前3列,而第12行根据表头数组的长度创建了剩余的列。

  3. 第15-22行:遍历文件夹中的Excel文件,并根据文件名的后缀名判断是否是Excel文件,如果不是就跳过。同时,使用一个变量rowNum来记录当前的行号,用于在输出文件中创建新的行。

  4. 第24-29行:打开Excel文件,并根据SHEET_NAMES数组中的名称来获取对应的Sheet对象。如果Sheet对象不存在,则跳过该Sheet。在读取完数据后,需要关闭Workbook对象,以释放资源。

  5. 第31-57行:获取表头和班级基本信息。其中,第31-44行获取表头,第46-60行获取班级基本信息,并根据表头中“教师姓名”这一列的位置来更新表头。然后根据学生人数在输出文件中创建相应数量的行,并将班级基本信息填充到这些行中。

  6. 第62-72行:获取成绩排名。其中,第62-68行遍历成绩排名Sheet中的每一行,获取学生的学号、姓名和成绩。然后在输出文件中创建新的行,并将学号、姓名和成绩填充到对应的列中。

五、GPT第二次生成Java代码

当第二次生成Java代码时,和第一次不一样了,用的方法也不一样了,相比第一次,代码量要少一些。所以问这个ChatGPT相同的问题并不一定有相同的回答。
第二次代码如下:
以下是实现上述要求的Java代码,其中进度条使用了Swing组件JProgressBar:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JProgressBar;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelMerger {
    private static final String[] SHEET_NAMES = {"班级基本信息", "班级学生成绩排名"};
    private static final String[] HEADER = {"序号", "班级编号", "教师姓名", "班级人数", "班长", "学号", "学生姓名", "成绩"};

    public static void mergeExcelFiles(String inputFolderPath, String outputFilePath, JProgressBar progressBar) throws IOException {
        List<File> inputFiles = getExcelFiles(new File(inputFolderPath));
        Workbook outputWorkbook = new XSSFWorkbook();
        Sheet outputSheet = outputWorkbook.createSheet();
        createHeaderRow(outputSheet);
        int rowNum = 1;
        for (int i = 0; i < inputFiles.size(); i++) {
            File inputFile = inputFiles.get(i);
            Workbook inputWorkbook = new XSSFWorkbook(new FileInputStream(inputFile));
            for (int j = 0; j < SHEET_NAMES.length; j++) {
                Sheet inputSheet = inputWorkbook.getSheet(SHEET_NAMES[j]);
                if (inputSheet == null) {
                    continue;
                }
                if (j == 0) {
                    mergeBasicInfo(inputSheet, outputSheet, rowNum);
                } else {
                    mergeScoreRanking(inputSheet, outputSheet, rowNum);
                }
            }
            rowNum += getStudentCount(inputWorkbook);
            inputWorkbook.close();
            progressBar.setValue((i + 1) * 100 / inputFiles.size());
        }
        outputWorkbook.write(new FileOutputStream(outputFilePath));
        outputWorkbook.close();
    }

    private static List<File> getExcelFiles(File folder) {
        List<File> files = new ArrayList<>();
        File[] allFiles = folder.listFiles();
        for (File file : allFiles) {
            if (file.isFile() && file.getName().toLowerCase().endsWith(".xlsx")) {
                files.add(file);
            }
        }
        return files;
    }

    private static void createHeaderRow(Sheet sheet) {
        Row headerRow = sheet.createRow(0);
        for (int i = 0; i < HEADER.length; i++) {
            Cell cell = headerRow.createCell(i);
            cell.setCellValue(HEADER[i]);
        }
    }

    private static void mergeBasicInfo(Sheet inputSheet, Sheet outputSheet, int rowNum) {
        Row inputRow = inputSheet.getRow(1);
        Row outputRow = outputSheet.createRow(rowNum);
        outputRow.createCell(0).setCellValue(rowNum - 1);
        for (int i = 1; i < 5; i++) {
            Cell cell = outputRow.createCell(i);
            cell.setCellValue(inputRow.getCell(i).getStringCellValue());
        }
    }

    private static void mergeScoreRanking(Sheet inputSheet, Sheet outputSheet, int rowNum) {
        int studentCount = inputSheet.getLastRowNum();
        for (int i = 2; i <= studentCount; i++) {
            Row inputRow = inputSheet.getRow(i);
            Row outputRow = outputSheet.createRow(rowNum);
            outputRow.createCell(0).setCellValue(rowNum - 1);
            for (int j = 1; j < 5; j++) {
                Cell cell = outputRow.createCell(j);
                cell.setCellValue(inputSheet.getRow(1).getCell(j).getStringCellValue());
            }
            for (int j = 5; j < HEADER.length; j++) {
                Cell cell = outputRow.createCell(j);
                cell.setCellValue(inputRow.getCell(j - 3).getStringCellValue());
            }
            rowNum++;
        }
    }

    private static int getStudentCount(Workbook workbook) {
        Sheet sheet = workbook.getSheet(SHEET_NAMES[0]);
        return (int) sheet.getRow(0).getCell(1).getNumericCellValue();
    }
}

主要代码解释:

  1. 第1行:定义常量SHEET_NAMES和HEADER。
  2. 第3-11行:定义getExcelFiles方法,通过File类的listFiles方法获取指定文件夹下的所有Excel文件。
  3. 第13-17行:定义createHeaderRow方法,创建合并后Excel文件的表头行。
  4. 第19-35行:定义mergeBasicInfo方法,合并班级基本信息工作表。
  5. 第37-57行:定义mergeScoreRanking方法,合并班级学生成绩排名工作表。
  6. 第59-63行:定义getStudentCount方法,获取班级人数。
  7. 第65-96行:定义mergeExcelFiles方法,对每个Excel文件进行合并,包括合并基本信息和成绩排名两个工作表,并将合并后的结果写入输出文件。在过程中使用进度条表示合并进度。

尾巴

本次的知识分享就到这了,谢谢你这么好看还关注我,我们下期再见!

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

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

相关文章

网络安全:网络信息安全的概述.

网络安全&#xff1a;网络信息安全的概述 网络信息安全是一门涉及计算机科学&#xff0c;网络技术&#xff0c;通信技术、密码技术、信息安全技术、应用数学、数论、信息论等多种学科的综合性学科。 它主要是指网络系统的硬件、软件及其系统中的数据受到保护&#xff0c;不受…

深度学习 -- Pytorch学习 数据集API Dataset与DataLoader 重载鸢尾花数据集

前言 在模型训练的步骤中&#xff0c;数据的部分非常重要&#xff0c;它的过程主要分为数据收集、数据划分、数据读取、数据预处理。 数据收集的有原始样本和标签(Img&#xff0c;label) 数据集的划分需要分为训练集、验证集、测试集。 训练集负责训练模型&#xff0c;验证集…

C++基础知识快速入门

目录 一, 命名空间 1.1命名空间使用命名空间中成员该如何使用呢&#xff1f; 1.2 命名空间其他2种使用方式&#xff1a; 1. using 将其中一个成员引入 2. using namespace 二&#xff0c;C输入&输出 &#xff08;简单运用&#xff09; 2. 1 头文件 2. 2 cout 与 …

2023年软件测试常见面试题100%问必背全套教程

随着数字化时代的到来&#xff0c;软件测试越来越受到重视。在未来的几年里&#xff0c;软件测试将继续成为信息技术领域中的热门职业之一。如果你是一名正在寻找或准备进入软件测试行业的人&#xff0c;那么这套常见面试题全套教程对你来说会非常有用。 这套教程旨在帮助你了…

MySQL主从同步配置

Mysql 主从同步原理 就是基于数据库里面的那个 binlog 文件进行数据同步 具体步骤&#xff1a; step1&#xff1a;master将数据改变记录到二进制日志&#xff08;binary log&#xff09;中。step2&#xff1a; 当slave上执行 start slave 命令之后&#xff0c;slave会创建一个…

Unity 后处理(Post-Processing) -- (2)创建后处理配置文件

通过前面一小节&#xff0c;我们初步认识了后处理是什么&#xff0c;在Unity中简单的试了试后处理的效果。本节我们来创建一个我们自己的后处理配置文件&#xff08;post-processing profile&#xff09;。 一个后处理配置文件包含了一系列为了达到特定视觉效果的后处理效果的配…

C51 - DS18B20

Thermometer 1> 实验概述2> 硬件设计3> DS18B204> 单总线&#xff08;1-Wire&#xff09;通讯协议4.1> 复位时序4.2> 写-DS18B20时序4.3> 读-DS18B20时序4.4> 命令 5> 程序设计5.1> 编程思路5.2> 代码实现 6> 联调测试 1> 实验概述 实现…

Redis集合底层实现原理

目录 本章重点简单动态字符串SDS集合底层实现原理zipListlistPackskipListquickListKey 与Value中元素的数量 本章重点 掌握Redis简单动态字符串了解Redis集合底层实现原理 简单动态字符串SDS SDS简介 我们Redis中无论是key还是value其数据类型都是字符串.我们Redis中的字符…

从入门到精通:30天速成黑客教程到底有多狠?

首先我谈下对黑客&网络安全的认知&#xff0c;其实最重要的是兴趣热爱&#xff0c;不同于网络安全工程师&#xff0c;他们大都是培训机构培训出来的&#xff0c;具备的基本都是防御和白帽子技能&#xff0c;他们绝大多数的人看的是工资&#xff0c;他们是为了就业而学习&am…

ShardingSphere学习笔记

目录 1. 概述 1.1 分库分表是什么 1.2 分库分表方式 1.2.1 垂直分表 1.2.2 垂直分库 1.2.3 水平分库 1.2.4 水平分表 1.3 小结 1.3 分库分表带来的问题 1.3.1 事务一致性问题 1.3.2 跨节点关联查询 1.3.3 跨节点分页、排序函数 1.3.4 主键避重 1.3.5 公共表 2. …

JavaSE基础(二)—— 类型转换、运算符、键盘录入

目录 一、类型转换 1. 自动类型转换 1.1 自动类型转换的底层原理&#xff1a; ​1.2 自动类型转换的其他形式​编辑 2. 表达式的自动类型转换 3. 强制类型转换 3.1 强制类型转换底层原理​编辑 3.2 注意事项 二、运算符 1. 算数运算符 1.1 案例&#xff1a;数值拆分…

【群智能算法】一种改进的哈里斯鹰优化算法 IHHO算法[1]【Matlab代码#17】

文章目录 1. 原始HHO算法2. 改进的哈里斯鹰优化算法2.1 动态自适应逃逸能量E2.2 拉普拉斯交叉算子2.3 动态自适应权重 3. 部分代码展示4. 仿真图展示5. 资源获取 1. 原始HHO算法 详细介绍此处略&#xff0c;可参考HHO算法介绍 2. 改进的哈里斯鹰优化算法 2.1 动态自适应逃逸…

【算法】刷题中的位运算

作者&#xff1a;指针不指南吗 专栏&#xff1a;算法篇 &#x1f43e;人类做题的过程&#xff0c;其实是暴搜的过程&#x1f43e; 文章目录 1.位运算概述2.位运算符3.位运算应用3.1整数的奇偶性判断3.2有关 2 的幂的应用3.3lowbit(x)返回x的最后一位13.4二进制数中1的个数3.5求…

6.S081——陷阱部分(一篇读懂Xv6系统调用)——xv6源码完全解析系列(5)

0.briefly speaking 这篇博客将要开始尝试阅读和研究与Xv6陷阱机制相关的代码&#xff0c;主要有以下文件&#xff0c;最重要的是结合Xv6 book将Xv6处理陷阱的相关逻辑和流程弄透。在Xv6的语境中所谓陷阱的触发有以下三种情况&#xff1a; 系统调用严重错误&#xff08;比如除…

设备仪器仪表盘读数识别算法 yolov5

设备仪器仪表盘读数识别系统基于YoLov5网络模型分析技术&#xff0c;设备仪器仪表盘读数识别算法模型自动识别指针型仪表读数。Yolo算法采用一个单独的CNN模型实现end-to-end的目标检测&#xff0c;核心思想就是利用整张图作为网络的输入&#xff0c;直接在输出层回归 bounding…

【Maven笔记2】Maven安装与配置

1、前置准备 maven是使用Java语言进行开发的&#xff0c;因此在安装maven之前&#xff0c;先需要有java运行环境。如何确认本机是否安装了JDK环境呢&#xff1f;打开终端运行如下命令&#xff1a; java -version如下图显示说明已经安装了JDK环境。 备注&#xff1a;如何安装J…

Intel Xeon(Ice Lake) Platinum 8369B阿里云CPU处理器

阿里云服务器CPU处理器Intel Xeon(Ice Lake) Platinum 8369B&#xff0c;基频2.7 GHz&#xff0c;全核睿频3.5 GHz&#xff0c;计算性能稳定。目前阿里云第七代云服务器ECS计算型c7、ECS通用型g7、内存型r7等规格均采用该款CPU。 Intel Xeon(Ice Lake) Platinum 8369B Intel …

OSI七层网络参考模型

七层模型的诞生 深夜中&#xff0c;在一家美国酒吧坐着几个正在谈论迪斯尼电影里的7个小矮人&#xff0c;他们把小矮人的名字写在餐巾纸上&#xff0c;有人开玩笑说7对于网络分层是个好数字&#xff0c;这几个人就是制定OSI标准小组的成员&#xff0c;后来OSI真的就设计成了七…

TensorFlow入门图像分类-猫狗分类-MobileNet优化

在上一篇文章中《Tensorflow入门图像分类-猫狗分类-安卓》&#xff0c;介绍了使用TensorFlow训练一个猫狗图像分类器的模型并在安卓应用上使用的全过程。 在这一篇文章中&#xff0c;将采用 MobileNet 来重新训练一个猫狗图像分类器。 一、 MobileNet 介绍 MobileNet是一种轻量…

服务(第十六篇)mysql①基础

什么是数据库&#xff1f; 数据&#xff1a; ①描述事物的符号记录称为数据&#xff08;Data&#xff09;&#xff0c;数字、文字、图形、图像、声音、档案记录等&#xff1b; ②数据是以“记录”的形式按照统一的格式进行存储的&#xff0c;而不是杂乱无章的。 行&#xf…