[{"data":1,"prerenderedAt":2887},["ShallowReactive",2],{"\u002Fposts\u002F4dCtXKfh":3,"surround-\u002Fposts\u002F4dCtXKfh":2876},{"id":4,"title":5,"body":6,"categories":2851,"date":2853,"description":2854,"draft":2855,"extension":2856,"image":2857,"meta":2858,"navigation":490,"path":2860,"permalink":2860,"published":2861,"readingTime":2862,"recommend":2867,"references":2861,"seo":2868,"sitemap":2869,"stem":2870,"tags":2871,"type":2874,"updated":2853,"__hash__":2875},"content\u002Fposts\u002F2025\u002F基于CNN深度学习网络的交通标志识别.md","基于CNN深度学习网络的交通标志识别",{"type":7,"value":8,"toc":2827},"minimark",[9,35,39,44,47,90,94,103,107,116,119,122,132,136,159,162,172,175,188,191,200,203,221,224,233,236,239,246,281,284,287,313,316,319,322,327,330,336,339,344,347,352,355,358,361,373,376,401,404,412,416,419,443,460,1211,1248,1296,1310,1313,1486,1491,1495,1982,2028,2031,2201,2209,2212,2548,2557,2560,2818,2823],[10,11,12,16,19],"blockquote",{},[13,14,15],"p",{},"本项目实现了一个基于CNN深度学习的交通标志识别系统，使用Keras构建卷积神经网络，训练准确率高达95%。系统采用Python开发，配备友好的tkinter图形界面，支持用户上传图片并自动识别交通标志类型。项目包含完整的数据预处理、模型训练、评估与部署流程，代码开源，适合深度学习与计算机视觉的学习与实践。源码与数据集均已公开，欢迎访问GitHub或Gitee获取。",[13,17,18],{},"项目地址：",[13,20,21,27,30],{},[22,23,24],"a",{"href":24,"rel":25},"https:\u002F\u002Fgithub.com\u002Fdhbxs\u002Ftraffic-sign-recognition",[26],"nofollow",[28,29],"br",{},[22,31,32],{"href":32,"rel":33,"icon":34},"https:\u002F\u002Fgitee.com\u002Fdhbxs\u002FTraffic-sign-recognition",[26],"simple-icons:gitee",[36,37,38],"h2",{"id":38},"环境搭建",[40,41,43],"h3",{"id":42},"安装anaconda","安装Anaconda",[13,45,46],{},"可以去官网下载Anaconda的安装包，一键安装。国内用户可能下载会很慢，建议走镜像下载站，windows用户建议默认安装就好，不要改安装路径，所有设置默认即可。",[48,49,50,68,83],"ol",{},[51,52,53,54,56,60,62,63],"li",{},"Mac平台",[28,55],{},[22,57,58],{"href":58,"rel":59},"https:\u002F\u002Fwww.anaconda.com\u002F",[26],[28,61],{},"清华镜像源下载 ",[22,64,67],{"href":65,"rel":66},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fanaconda\u002Farchive\u002FAnaconda3-2020.11-MacOSX-x86%5C%5C_64.pkg",[26],"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fanaconda\u002Farchive\u002FAnaconda3-2020.11-MacOSX-x86%5C\\_64.pkg",[51,69,70,71,73,76,62,78],{},"Windows平台",[28,72],{},[22,74,58],{"href":58,"rel":75},[26],[28,77],{},[22,79,82],{"href":80,"rel":81},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fanaconda\u002Farchive\u002FAnaconda3-2020.11-Windows-x86%5C%5C_64.exe",[26],"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fanaconda\u002Farchive\u002FAnaconda3-2020.11-Windows-x86%5C\\_64.exe",[51,84,85,86],{},"清华镜像源汇总 ",[22,87,88],{"href":88,"rel":89},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fanaconda\u002Farchive\u002F",[26],[40,91,93],{"id":92},"安装pycharm","安装Pycharm",[13,95,96,97,99],{},"这里附上Pycharm官网，同Anaconda一样，默认所有设置点下一步安装即可。",[28,98],{},[22,100,101],{"href":101,"rel":102},"https:\u002F\u002Fwww.jetbrains.com\u002Fzh-cn\u002Fpycharm\u002Fdownload\u002F",[26],[40,104,106],{"id":105},"在pycharm中搭建深度学习环境","在PyCharm中搭建深度学习环境",[13,108,109,110,112],{},"之前博客专门写过一期搭建深度学习环境的教程，这里不再赘述。传送门：",[28,111],{},[22,113,114],{"href":114,"rel":115},"https:\u002F\u002Fblog.dhbxs.top\u002Farchives\u002F37561f92",[26],[36,117,118],{"id":118},"创建项目",[13,120,121],{},"本项目托管于Github&Gitee平台，使用时可直接使用Git clone到本地运行即可。",[13,123,124,127,129],{},[22,125,24],{"href":24,"rel":126},[26],[28,128],{},[22,130,32],{"href":32,"rel":131,"icon":34},[26],[40,133,135],{"id":134},"clone项目","Clone项目",[48,137,138,150],{},[51,139,140,141,145,146],{},"打开Pycharm，点击",[142,143,144],"code",{"code":144},"Get from VCS","按钮",[147,148],"pic",{"src":149},"https:\u002F\u002Ffile.dhbxs.top\u002F2025\u002F10\u002Fajthxban.webp",[51,151,152,153,156,157,145],{},"在URL内填入",[142,154,155],{"code":155},"Clone","地址，然后点击右下角的",[142,158,155],{"code":155},[147,160],{"src":161},"https:\u002F\u002Ffile.dhbxs.top\u002F2025\u002F10\u002Fwhicsalb.webp",[48,163,165],{"start":164},3,[51,166,167,168,171],{},"Clone完成后，如弹出该弹窗，点击",[142,169,170],{"code":170},"Cancel","取消创建虚拟环境，我们使用环境搭建步骤中所创建的环境：",[147,173],{"src":174},"https:\u002F\u002Ffile.dhbxs.top\u002F2025\u002F10\u002Fjmrmisbe.webp",[48,176,178],{"start":177},4,[51,179,180,181,184,185],{},"在右下角点击",[142,182,183],{"code":183},"No interpreter","，然后选择",[142,186,187],{"code":187},"Settings",[147,189],{"src":190},"https:\u002F\u002Ffile.dhbxs.top\u002F2025\u002F10\u002Fjreauygd.webp",[48,192,194],{"start":193},5,[51,195,196,197],{},"在弹出的页面中，选择 ",[142,198,199],{"code":199},"Add...",[147,201],{"src":202},"https:\u002F\u002Ffile.dhbxs.top\u002F2025\u002F10\u002Fwdsdvszi.webp",[48,204,206],{"start":205},6,[51,207,208,209,212,213,216,217,220],{},"之后按如下图操作，找到环境搭建时创建的 ",[142,210,211],{"code":211},"Anaconda"," 环境，这里为 ",[142,214,215],{"code":215},"DL"," 环境，然后选择，点击 ",[142,218,219],{"code":219},"OK","：",[147,222],{"src":223},"https:\u002F\u002Ffile.dhbxs.top\u002F2025\u002F10\u002Fdgithmqx.webp",[48,225,227],{"start":226},7,[51,228,229,230,232],{},"如图所示，点击 ",[142,231,219],{"code":219},":",[147,234],{"src":235},"https:\u002F\u002Ffile.dhbxs.top\u002F2025\u002F10\u002Fxrwfazjz.webp",[40,237,238],{"id":238},"安装项目所需包",[13,240,241,242,245],{},"点击底部的 ",[142,243,244],{"code":244},"terminal"," 然后在弹出的控制台中输入以下命令，然后回车，等待安装完成：",[247,248,253],"pre",{"className":249,"code":250,"language":251,"meta":252,"style":252},"language-shell shiki shiki-themes catppuccin-latte one-dark-pro","pip install -r requirements.txt -i https:\u002F\u002Fmirrors.aliyun.com\u002Fpypi\u002Fsimple\n","shell","",[142,254,255],{"__ignoreMap":252},[256,257,260,264,268,272,275,278],"span",{"class":258,"line":259},"line",1,[256,261,263],{"class":262},"seVD2","pip",[256,265,267],{"class":266},"sw_MA"," install",[256,269,271],{"class":270},"sel-X"," -r",[256,273,274],{"class":266}," requirements.txt",[256,276,277],{"class":270}," -i",[256,279,280],{"class":266}," https:\u002F\u002Fmirrors.aliyun.com\u002Fpypi\u002Fsimple\n",[147,282],{"src":283},"https:\u002F\u002Ffile.dhbxs.top\u002F2025\u002F10\u002Fslagrkym.webp",[40,285,286],{"id":286},"下载训练数据集",[48,288,289,310],{},[51,290,291,292,294,295,299,301,302,220,306],{},"点击以下链接，下载训练模型所需的数据集",[28,293],{},"下载地址：",[22,296,297],{"href":297,"rel":298},"https:\u002F\u002Fpan.baidu.com\u002Fshare\u002Finit?surl=lAb9qd9jh6newMeU_HWArw&pwd=uqrg",[26],[28,300],{},"Github发布页下载地址",[303,304,305],"strong",{},"比较快",[22,307,308],{"href":308,"rel":309},"https:\u002F\u002Fgithub.com\u002Fdhbxs\u002Ftraffic-sign-recognition\u002Freleases\u002Fdownload\u002Fdata\u002Fdata.zip",[26],[51,311,312],{},"将下载好的训练数据解压后，放到项目的根目录，如下图所示：",[147,314],{"src":315},"https:\u002F\u002Ffile.dhbxs.top\u002F2025\u002F10\u002Fhjmanuma.webp",[36,317,318],{"id":318},"运行项目",[40,320,321],{"id":321},"用示例模型进行识别",[48,323,324],{},[51,325,326],{},"双击打开gui.py文件，然后在代码空白处右击选择Run运行gui.py文件。",[147,328],{"src":329},"https:\u002F\u002Ffile.dhbxs.top\u002F2025\u002F10\u002Fzyugbjtd.webp",[48,331,333],{"start":332},2,[51,334,335],{},"再打开的程序页面中选择上传图片",[147,337],{"src":338},"https:\u002F\u002Ffile.dhbxs.top\u002F2025\u002F10\u002Fzfxwrwdy.webp",[48,340,341],{"start":164},[51,342,343],{},"在上传图片对话框中选择一张交通标志图片，点击打开",[147,345],{"src":346},"https:\u002F\u002Ffile.dhbxs.top\u002F2025\u002F10\u002Fxjhdnjsr.webp",[48,348,349],{"start":177},[51,350,351],{},"如片上传完成后会在页面中显示，然后点击右边的识别按钮，识别结果会显示在页面中，如下图所示",[147,353],{"src":354},"https:\u002F\u002Ffile.dhbxs.top\u002F2025\u002F10\u002Fplfjhmmh.webp",[147,356],{"src":357},"https:\u002F\u002Ffile.dhbxs.top\u002F2025\u002F10\u002Fjsdlsakm.webp",[40,359,360],{"id":360},"用自己训练的模型进行识别",[48,362,363,370],{},[51,364,365,366,369],{},"打开 ",[142,367,368],{"code":368},"traffic_sign.py"," 文件",[51,371,372],{},"将如图所示代码部分修改为自己平台类型，windows平台改为win，mac平台改为mac",[147,374],{"src":375},"https:\u002F\u002Ffile.dhbxs.top\u002F2025\u002F10\u002Fotlbsiwk.webp",[48,377,378,393],{"start":164},[51,379,380,381,384,385,388,389,392],{},"右击文件，点击 ",[142,382,383],{"code":383},"Run"," 运行代码，运行时长与是否有独立显卡有关，耐心等待运行结束后，会生成一个名为 ",[142,386,387],{"code":387},"my_traffic_classifier.h5"," 的模型 ",[142,390,391],{"code":391},"h5"," 文件。",[51,394,365,395,398,399],{},[142,396,397],{"code":397},"gui.py"," 文件，修改模型路径名为刚刚生成的",[142,400,387],{"code":387},[147,402],{"src":403},"https:\u002F\u002Ffile.dhbxs.top\u002F2025\u002F10\u002Fxuepmwrf.webp",[48,405,406],{"start":193},[51,407,408,409,411],{},"运行 ",[142,410,397],{"code":397}," 文件查看效果",[36,413,415],{"id":414},"traffic_sign-开发文档","traffic_sign 开发文档",[40,417,418],{"id":418},"读取训练数据集",[247,420,424],{"className":421,"code":422,"language":423,"meta":252,"style":252},"language-python shiki shiki-themes catppuccin-latte one-dark-pro","pc = \"mac\"  # 根据自己平台设置，mac表示苹果PC，win表示windowsPC\n","python",[142,425,426],{"__ignoreMap":252},[256,427,428,432,436,439],{"class":258,"line":259},[256,429,431],{"class":430},"sa2x1","pc ",[256,433,435],{"class":434},"sqgB4","=",[256,437,438],{"class":266}," \"mac\"",[256,440,442],{"class":441},"skYY2","  # 根据自己平台设置，mac表示苹果PC，win表示windowsPC\n",[10,444,445],{},[13,446,447,448,451,452,455,456,459],{},"不同系统有不同的路径表示方法，windows上路径都是右斜杠 ",[142,449,450],{"code":450},"\\"," ，代码中必须分开写，以提高兼容性。我目前是mac系统，在mac系统中，路径都是左斜杠 ",[142,453,454],{"code":454},"\u002F"," 。代码中通过设置 ",[142,457,458],{"code":458},"pc"," 变量的值来区分当前运行环境。",[247,461,463],{"className":421,"code":462,"language":423,"meta":252,"style":252},"cur_path = os.getcwd()\n\nlog_path = \"\"\n\nif pc == \"mac\":\n    # 当前路径mac版\n    log_path = os.getcwd() + \"\u002Flog\"\n    print(\"当前平台\" + pc)\n    # 检索图像及其标签\n    for i in range(classes):\n        path = os.path.join(cur_path, 'data\u002FTrain', str(i))\n        images = os.listdir(path)\n        print(\"正在加载第%d类训练图片\" % (i + 1))\n        for a in images:\n            # mac版\n            try:\n                image = Image.open(path + '\u002F' + a)\n                image = image.resize((30, 30))\n                image = np.array(image)\n                data.append(image)\n                labels.append(i)\n            except FileNotFoundError:\n                print(\"加载训练集图片出错！\")\n\nelif pc == \"win\":\n    # 当前路径设置为win版\n    log_path = os.getcwd() + \"\\\\log\"\n    print(\"当前平台\" + pc)\n    # 检索图像及其标签\n    for i in range(classes):\n        path = os.path.join(cur_path, 'data\u002FTrain', str(i))\n        images = os.listdir(path)\n        print(\"正在加载第%d类训练图片\" % (i + 1))\n        for a in images:\n            try:\n                image = Image.open(path + '\\\\' + a)\n                image = image.resize((30, 30))\n                image = np.array(image)\n                data.append(image)\n                labels.append(i)\n            except FileNotFoundError:\n                print(\"加载训练集图片出错！\")\nelse:\n    raise Exception('print(\"路径设置出错！\")')\n",[142,464,465,486,492,502,506,523,528,550,571,577,600,645,666,702,718,724,732,765,793,815,832,848,860,873,878,893,899,926,941,946,963,998,1017,1042,1055,1062,1095,1118,1137,1152,1167,1176,1187,1195],{"__ignoreMap":252},[256,466,467,470,472,475,479,483],{"class":258,"line":259},[256,468,469],{"class":430},"cur_path ",[256,471,435],{"class":434},[256,473,474],{"class":430}," os",[256,476,478],{"class":477},"sgT6j",".",[256,480,482],{"class":481},"s3w6o","getcwd",[256,484,485],{"class":477},"()\n",[256,487,488],{"class":258,"line":332},[256,489,491],{"emptyLinePlaceholder":490},true,"\n",[256,493,494,497,499],{"class":258,"line":164},[256,495,496],{"class":430},"log_path ",[256,498,435],{"class":434},[256,500,501],{"class":266}," \"\"\n",[256,503,504],{"class":258,"line":177},[256,505,491],{"emptyLinePlaceholder":490},[256,507,508,512,515,518,520],{"class":258,"line":193},[256,509,511],{"class":510},"sSWcl","if",[256,513,514],{"class":430}," pc ",[256,516,517],{"class":434},"==",[256,519,438],{"class":266},[256,521,522],{"class":477},":\n",[256,524,525],{"class":258,"line":205},[256,526,527],{"class":441},"    # 当前路径mac版\n",[256,529,530,533,535,537,539,541,544,547],{"class":258,"line":226},[256,531,532],{"class":430},"    log_path ",[256,534,435],{"class":434},[256,536,474],{"class":430},[256,538,478],{"class":477},[256,540,482],{"class":481},[256,542,543],{"class":477},"()",[256,545,546],{"class":434}," +",[256,548,549],{"class":266}," \"\u002Flog\"\n",[256,551,553,557,560,563,565,568],{"class":258,"line":552},8,[256,554,556],{"class":555},"sk-YW","    print",[256,558,559],{"class":477},"(",[256,561,562],{"class":266},"\"当前平台\"",[256,564,546],{"class":434},[256,566,567],{"class":430}," pc",[256,569,570],{"class":477},")\n",[256,572,574],{"class":258,"line":573},9,[256,575,576],{"class":441},"    # 检索图像及其标签\n",[256,578,580,583,586,589,592,594,597],{"class":258,"line":579},10,[256,581,582],{"class":510},"    for",[256,584,585],{"class":430}," i ",[256,587,588],{"class":510},"in",[256,590,591],{"class":555}," range",[256,593,559],{"class":477},[256,595,596],{"class":430},"classes",[256,598,599],{"class":477},"):\n",[256,601,603,606,608,610,612,615,617,620,622,625,628,631,633,637,639,642],{"class":258,"line":602},11,[256,604,605],{"class":430},"        path ",[256,607,435],{"class":434},[256,609,474],{"class":430},[256,611,478],{"class":477},[256,613,614],{"class":430},"path",[256,616,478],{"class":477},[256,618,619],{"class":481},"join",[256,621,559],{"class":477},[256,623,624],{"class":430},"cur_path",[256,626,627],{"class":477},",",[256,629,630],{"class":266}," 'data\u002FTrain'",[256,632,627],{"class":477},[256,634,636],{"class":635},"s0gAL"," str",[256,638,559],{"class":477},[256,640,641],{"class":430},"i",[256,643,644],{"class":477},"))\n",[256,646,648,651,653,655,657,660,662,664],{"class":258,"line":647},12,[256,649,650],{"class":430},"        images ",[256,652,435],{"class":434},[256,654,474],{"class":430},[256,656,478],{"class":477},[256,658,659],{"class":481},"listdir",[256,661,559],{"class":477},[256,663,614],{"class":430},[256,665,570],{"class":477},[256,667,669,672,674,677,681,684,687,690,693,696,700],{"class":258,"line":668},13,[256,670,671],{"class":555},"        print",[256,673,559],{"class":477},[256,675,676],{"class":266},"\"正在加载第",[256,678,680],{"class":679},"sxrzW","%d",[256,682,683],{"class":266},"类训练图片\"",[256,685,686],{"class":434}," %",[256,688,689],{"class":477}," (",[256,691,692],{"class":430},"i ",[256,694,695],{"class":434},"+",[256,697,699],{"class":698},"sYQis"," 1",[256,701,644],{"class":477},[256,703,705,708,711,713,716],{"class":258,"line":704},14,[256,706,707],{"class":510},"        for",[256,709,710],{"class":430}," a ",[256,712,588],{"class":510},[256,714,715],{"class":430}," images",[256,717,522],{"class":477},[256,719,721],{"class":258,"line":720},15,[256,722,723],{"class":441},"            # mac版\n",[256,725,727,730],{"class":258,"line":726},16,[256,728,729],{"class":510},"            try",[256,731,522],{"class":477},[256,733,735,738,740,743,745,748,750,753,755,758,760,763],{"class":258,"line":734},17,[256,736,737],{"class":430},"                image ",[256,739,435],{"class":434},[256,741,742],{"class":430}," Image",[256,744,478],{"class":477},[256,746,747],{"class":481},"open",[256,749,559],{"class":477},[256,751,752],{"class":430},"path ",[256,754,695],{"class":434},[256,756,757],{"class":266}," '\u002F'",[256,759,546],{"class":434},[256,761,762],{"class":430}," a",[256,764,570],{"class":477},[256,766,768,770,772,775,777,780,783,786,788,791],{"class":258,"line":767},18,[256,769,737],{"class":430},[256,771,435],{"class":434},[256,773,774],{"class":430}," image",[256,776,478],{"class":477},[256,778,779],{"class":481},"resize",[256,781,782],{"class":477},"((",[256,784,785],{"class":698},"30",[256,787,627],{"class":477},[256,789,790],{"class":698}," 30",[256,792,644],{"class":477},[256,794,796,798,800,803,805,808,810,813],{"class":258,"line":795},19,[256,797,737],{"class":430},[256,799,435],{"class":434},[256,801,802],{"class":430}," np",[256,804,478],{"class":477},[256,806,807],{"class":481},"array",[256,809,559],{"class":477},[256,811,812],{"class":430},"image",[256,814,570],{"class":477},[256,816,818,821,823,826,828,830],{"class":258,"line":817},20,[256,819,820],{"class":430},"                data",[256,822,478],{"class":477},[256,824,825],{"class":481},"append",[256,827,559],{"class":477},[256,829,812],{"class":430},[256,831,570],{"class":477},[256,833,835,838,840,842,844,846],{"class":258,"line":834},21,[256,836,837],{"class":430},"                labels",[256,839,478],{"class":477},[256,841,825],{"class":481},[256,843,559],{"class":477},[256,845,641],{"class":430},[256,847,570],{"class":477},[256,849,851,854,858],{"class":258,"line":850},22,[256,852,853],{"class":510},"            except",[256,855,857],{"class":856},"siVku"," FileNotFoundError",[256,859,522],{"class":477},[256,861,863,866,868,871],{"class":258,"line":862},23,[256,864,865],{"class":555},"                print",[256,867,559],{"class":477},[256,869,870],{"class":266},"\"加载训练集图片出错！\"",[256,872,570],{"class":477},[256,874,876],{"class":258,"line":875},24,[256,877,491],{"emptyLinePlaceholder":490},[256,879,881,884,886,888,891],{"class":258,"line":880},25,[256,882,883],{"class":510},"elif",[256,885,514],{"class":430},[256,887,517],{"class":434},[256,889,890],{"class":266}," \"win\"",[256,892,522],{"class":477},[256,894,896],{"class":258,"line":895},26,[256,897,898],{"class":441},"    # 当前路径设置为win版\n",[256,900,902,904,906,908,910,912,914,916,919,923],{"class":258,"line":901},27,[256,903,532],{"class":430},[256,905,435],{"class":434},[256,907,474],{"class":430},[256,909,478],{"class":477},[256,911,482],{"class":481},[256,913,543],{"class":477},[256,915,546],{"class":434},[256,917,918],{"class":266}," \"",[256,920,922],{"class":921},"sFWNk","\\\\",[256,924,925],{"class":266},"log\"\n",[256,927,929,931,933,935,937,939],{"class":258,"line":928},28,[256,930,556],{"class":555},[256,932,559],{"class":477},[256,934,562],{"class":266},[256,936,546],{"class":434},[256,938,567],{"class":430},[256,940,570],{"class":477},[256,942,944],{"class":258,"line":943},29,[256,945,576],{"class":441},[256,947,949,951,953,955,957,959,961],{"class":258,"line":948},30,[256,950,582],{"class":510},[256,952,585],{"class":430},[256,954,588],{"class":510},[256,956,591],{"class":555},[256,958,559],{"class":477},[256,960,596],{"class":430},[256,962,599],{"class":477},[256,964,966,968,970,972,974,976,978,980,982,984,986,988,990,992,994,996],{"class":258,"line":965},31,[256,967,605],{"class":430},[256,969,435],{"class":434},[256,971,474],{"class":430},[256,973,478],{"class":477},[256,975,614],{"class":430},[256,977,478],{"class":477},[256,979,619],{"class":481},[256,981,559],{"class":477},[256,983,624],{"class":430},[256,985,627],{"class":477},[256,987,630],{"class":266},[256,989,627],{"class":477},[256,991,636],{"class":635},[256,993,559],{"class":477},[256,995,641],{"class":430},[256,997,644],{"class":477},[256,999,1001,1003,1005,1007,1009,1011,1013,1015],{"class":258,"line":1000},32,[256,1002,650],{"class":430},[256,1004,435],{"class":434},[256,1006,474],{"class":430},[256,1008,478],{"class":477},[256,1010,659],{"class":481},[256,1012,559],{"class":477},[256,1014,614],{"class":430},[256,1016,570],{"class":477},[256,1018,1020,1022,1024,1026,1028,1030,1032,1034,1036,1038,1040],{"class":258,"line":1019},33,[256,1021,671],{"class":555},[256,1023,559],{"class":477},[256,1025,676],{"class":266},[256,1027,680],{"class":679},[256,1029,683],{"class":266},[256,1031,686],{"class":434},[256,1033,689],{"class":477},[256,1035,692],{"class":430},[256,1037,695],{"class":434},[256,1039,699],{"class":698},[256,1041,644],{"class":477},[256,1043,1045,1047,1049,1051,1053],{"class":258,"line":1044},34,[256,1046,707],{"class":510},[256,1048,710],{"class":430},[256,1050,588],{"class":510},[256,1052,715],{"class":430},[256,1054,522],{"class":477},[256,1056,1058,1060],{"class":258,"line":1057},35,[256,1059,729],{"class":510},[256,1061,522],{"class":477},[256,1063,1065,1067,1069,1071,1073,1075,1077,1079,1081,1084,1086,1089,1091,1093],{"class":258,"line":1064},36,[256,1066,737],{"class":430},[256,1068,435],{"class":434},[256,1070,742],{"class":430},[256,1072,478],{"class":477},[256,1074,747],{"class":481},[256,1076,559],{"class":477},[256,1078,752],{"class":430},[256,1080,695],{"class":434},[256,1082,1083],{"class":266}," '",[256,1085,922],{"class":921},[256,1087,1088],{"class":266},"'",[256,1090,546],{"class":434},[256,1092,762],{"class":430},[256,1094,570],{"class":477},[256,1096,1098,1100,1102,1104,1106,1108,1110,1112,1114,1116],{"class":258,"line":1097},37,[256,1099,737],{"class":430},[256,1101,435],{"class":434},[256,1103,774],{"class":430},[256,1105,478],{"class":477},[256,1107,779],{"class":481},[256,1109,782],{"class":477},[256,1111,785],{"class":698},[256,1113,627],{"class":477},[256,1115,790],{"class":698},[256,1117,644],{"class":477},[256,1119,1121,1123,1125,1127,1129,1131,1133,1135],{"class":258,"line":1120},38,[256,1122,737],{"class":430},[256,1124,435],{"class":434},[256,1126,802],{"class":430},[256,1128,478],{"class":477},[256,1130,807],{"class":481},[256,1132,559],{"class":477},[256,1134,812],{"class":430},[256,1136,570],{"class":477},[256,1138,1140,1142,1144,1146,1148,1150],{"class":258,"line":1139},39,[256,1141,820],{"class":430},[256,1143,478],{"class":477},[256,1145,825],{"class":481},[256,1147,559],{"class":477},[256,1149,812],{"class":430},[256,1151,570],{"class":477},[256,1153,1155,1157,1159,1161,1163,1165],{"class":258,"line":1154},40,[256,1156,837],{"class":430},[256,1158,478],{"class":477},[256,1160,825],{"class":481},[256,1162,559],{"class":477},[256,1164,641],{"class":430},[256,1166,570],{"class":477},[256,1168,1170,1172,1174],{"class":258,"line":1169},41,[256,1171,853],{"class":510},[256,1173,857],{"class":856},[256,1175,522],{"class":477},[256,1177,1179,1181,1183,1185],{"class":258,"line":1178},42,[256,1180,865],{"class":555},[256,1182,559],{"class":477},[256,1184,870],{"class":266},[256,1186,570],{"class":477},[256,1188,1190,1193],{"class":258,"line":1189},43,[256,1191,1192],{"class":510},"else",[256,1194,522],{"class":477},[256,1196,1198,1201,1204,1206,1209],{"class":258,"line":1197},44,[256,1199,1200],{"class":510},"    raise",[256,1202,1203],{"class":856}," Exception",[256,1205,559],{"class":477},[256,1207,1208],{"class":266},"'print(\"路径设置出错！\")'",[256,1210,570],{"class":477},[10,1212,1213],{},[13,1214,1215,1216,1218,1219,1221,1222,1225,1226,1229,1230,1233,1234,1237,1238,1240,1241,1243,1244,1247],{},"通过 ",[142,1217,511],{"code":511}," 判断 ",[142,1220,458],{"code":458}," 变量的值，进而确定运行环境。通过 ",[142,1223,1224],{"code":1224},"for"," 循环将 ",[142,1227,1228],{"code":1228},"data"," 文件夹中的文件遍历后，将图片大小转换成 ",[142,1231,1232],{"code":1232},"30x30"," 的像素大小并转换成 ",[142,1235,1236],{"code":1236},"numpy"," 数组添加到 ",[142,1239,812],{"code":812}," 对象中。同时将文件所在路径保存到 ",[142,1242,1228],{"code":1228}," 列表中，以及将路径中携带的标签信息保存到 ",[142,1245,1246],{"code":1246},"labels"," 列表中。",[247,1249,1251],{"className":421,"code":1250,"language":423,"meta":252,"style":252},"# 将列表转换为numpy数组\ndata = np.array(data)\nlabels = np.array(labels)\n",[142,1252,1253,1258,1277],{"__ignoreMap":252},[256,1254,1255],{"class":258,"line":259},[256,1256,1257],{"class":441},"# 将列表转换为numpy数组\n",[256,1259,1260,1263,1265,1267,1269,1271,1273,1275],{"class":258,"line":332},[256,1261,1262],{"class":430},"data ",[256,1264,435],{"class":434},[256,1266,802],{"class":430},[256,1268,478],{"class":477},[256,1270,807],{"class":481},[256,1272,559],{"class":477},[256,1274,1228],{"class":430},[256,1276,570],{"class":477},[256,1278,1279,1282,1284,1286,1288,1290,1292,1294],{"class":258,"line":164},[256,1280,1281],{"class":430},"labels ",[256,1283,435],{"class":434},[256,1285,802],{"class":430},[256,1287,478],{"class":477},[256,1289,807],{"class":481},[256,1291,559],{"class":477},[256,1293,1246],{"class":430},[256,1295,570],{"class":477},[10,1297,1298],{},[13,1299,1300,1301,1303,1304,1306,1307,1309],{},"最后将 ",[142,1302,1228],{"code":1228}," 和 ",[142,1305,1246],{"code":1246}," 列表转换为 ",[142,1308,1236],{"code":1236}," 数组。",[40,1311,1312],{"id":1312},"清洗数据",[247,1314,1316],{"className":421,"code":1315,"language":423,"meta":252,"style":252},"# 分割训练和测试数据集\n# 训练集、测试集、训练标签集、测试标签集\nX_train, X_test, y_train, y_test = train_test_split(data, labels, test_size=0.2, random_state=42)\n\nprint(X_train.shape, X_test.shape, y_train.shape, y_test.shape)\n\n# 将标签转换为一种热编码(将数据扩维)One-Hot编码\ny_train = to_categorical(y_train, 43)\ny_test = to_categorical(y_test, 43)\n# print(y_test)\n",[142,1317,1318,1323,1328,1385,1389,1430,1434,1439,1461,1481],{"__ignoreMap":252},[256,1319,1320],{"class":258,"line":259},[256,1321,1322],{"class":441},"# 分割训练和测试数据集\n",[256,1324,1325],{"class":258,"line":332},[256,1326,1327],{"class":441},"# 训练集、测试集、训练标签集、测试标签集\n",[256,1329,1330,1333,1335,1338,1340,1343,1345,1348,1350,1353,1355,1357,1359,1362,1364,1368,1370,1373,1375,1378,1380,1383],{"class":258,"line":164},[256,1331,1332],{"class":430},"X_train",[256,1334,627],{"class":477},[256,1336,1337],{"class":430}," X_test",[256,1339,627],{"class":477},[256,1341,1342],{"class":430}," y_train",[256,1344,627],{"class":477},[256,1346,1347],{"class":430}," y_test ",[256,1349,435],{"class":434},[256,1351,1352],{"class":481}," train_test_split",[256,1354,559],{"class":477},[256,1356,1228],{"class":430},[256,1358,627],{"class":477},[256,1360,1361],{"class":430}," labels",[256,1363,627],{"class":477},[256,1365,1367],{"class":1366},"sddMY"," test_size",[256,1369,435],{"class":434},[256,1371,1372],{"class":698},"0.2",[256,1374,627],{"class":477},[256,1376,1377],{"class":1366}," random_state",[256,1379,435],{"class":434},[256,1381,1382],{"class":698},"42",[256,1384,570],{"class":477},[256,1386,1387],{"class":258,"line":177},[256,1388,491],{"emptyLinePlaceholder":490},[256,1390,1391,1394,1396,1398,1400,1403,1405,1407,1409,1411,1413,1415,1417,1419,1421,1424,1426,1428],{"class":258,"line":193},[256,1392,1393],{"class":555},"print",[256,1395,559],{"class":477},[256,1397,1332],{"class":430},[256,1399,478],{"class":477},[256,1401,1402],{"class":430},"shape",[256,1404,627],{"class":477},[256,1406,1337],{"class":430},[256,1408,478],{"class":477},[256,1410,1402],{"class":430},[256,1412,627],{"class":477},[256,1414,1342],{"class":430},[256,1416,478],{"class":477},[256,1418,1402],{"class":430},[256,1420,627],{"class":477},[256,1422,1423],{"class":430}," y_test",[256,1425,478],{"class":477},[256,1427,1402],{"class":430},[256,1429,570],{"class":477},[256,1431,1432],{"class":258,"line":205},[256,1433,491],{"emptyLinePlaceholder":490},[256,1435,1436],{"class":258,"line":226},[256,1437,1438],{"class":441},"# 将标签转换为一种热编码(将数据扩维)One-Hot编码\n",[256,1440,1441,1444,1446,1449,1451,1454,1456,1459],{"class":258,"line":552},[256,1442,1443],{"class":430},"y_train ",[256,1445,435],{"class":434},[256,1447,1448],{"class":481}," to_categorical",[256,1450,559],{"class":477},[256,1452,1453],{"class":430},"y_train",[256,1455,627],{"class":477},[256,1457,1458],{"class":698}," 43",[256,1460,570],{"class":477},[256,1462,1463,1466,1468,1470,1472,1475,1477,1479],{"class":258,"line":573},[256,1464,1465],{"class":430},"y_test ",[256,1467,435],{"class":434},[256,1469,1448],{"class":481},[256,1471,559],{"class":477},[256,1473,1474],{"class":430},"y_test",[256,1476,627],{"class":477},[256,1478,1458],{"class":698},[256,1480,570],{"class":477},[256,1482,1483],{"class":258,"line":579},[256,1484,1485],{"class":441},"# print(y_test)\n",[10,1487,1488],{},[13,1489,1490],{},"将读取到的数据按照比例，随机分割为训练集，测试集，训练标签集，测试标签集。然后采用热编码的方式，将标签集转为热编码。",[40,1492,1494],{"id":1493},"建立cnn卷积神经网络模型","建立CNN卷积神经网络模型",[247,1496,1498],{"className":421,"code":1497,"language":423,"meta":252,"style":252},"# 建立模型\nmodel = Sequential()\n# 添加卷积输入层 16个节点 5*5的卷积核大小\nmodel.add(Conv2D(filters=16, kernel_size=(3, 3), activation='relu', input_shape=X_train.shape[1:]))\n\n# 卷积层 + 最大池化层\nmodel.add(Conv2D(filters=32, kernel_size=(3, 3), activation='relu'))\nmodel.add(MaxPool2D(pool_size=(2, 2)))\n# 防止过拟合，网络正则化，随机消灭上一层的神经元\nmodel.add(Dropout(rate=0.25))\n\nmodel.add(Conv2D(filters=64, kernel_size=(3, 3), activation='relu'))\n\nmodel.add(MaxPool2D(pool_size=(2, 2)))\nmodel.add(Dropout(rate=0.25))\n# 展平层\nmodel.add(Flatten())\n# 密集连接层\nmodel.add(Dense(512, activation='relu'))\nmodel.add(Dropout(rate=0.5))\n# 全连接 + 输出层\nmodel.add(Dense(43, activation='softmax'))\n\n# 编译模型 分类交叉熵损失函数 Adam优化器 这种搭配常用在多元分类中\nmodel.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])\n\n",[142,1499,1500,1505,1517,1522,1599,1603,1608,1653,1686,1691,1716,1720,1765,1769,1797,1819,1824,1840,1845,1873,1896,1901,1929,1933,1938],{"__ignoreMap":252},[256,1501,1502],{"class":258,"line":259},[256,1503,1504],{"class":441},"# 建立模型\n",[256,1506,1507,1510,1512,1515],{"class":258,"line":332},[256,1508,1509],{"class":430},"model ",[256,1511,435],{"class":434},[256,1513,1514],{"class":481}," Sequential",[256,1516,485],{"class":477},[256,1518,1519],{"class":258,"line":164},[256,1520,1521],{"class":441},"# 添加卷积输入层 16个节点 5*5的卷积核大小\n",[256,1523,1524,1527,1529,1532,1534,1537,1539,1542,1544,1547,1549,1552,1554,1556,1559,1561,1564,1567,1570,1572,1575,1577,1580,1582,1584,1586,1589,1592,1596],{"class":258,"line":177},[256,1525,1526],{"class":430},"model",[256,1528,478],{"class":477},[256,1530,1531],{"class":481},"add",[256,1533,559],{"class":477},[256,1535,1536],{"class":481},"Conv2D",[256,1538,559],{"class":477},[256,1540,1541],{"class":1366},"filters",[256,1543,435],{"class":434},[256,1545,1546],{"class":698},"16",[256,1548,627],{"class":477},[256,1550,1551],{"class":1366}," kernel_size",[256,1553,435],{"class":434},[256,1555,559],{"class":477},[256,1557,1558],{"class":698},"3",[256,1560,627],{"class":477},[256,1562,1563],{"class":698}," 3",[256,1565,1566],{"class":477},"),",[256,1568,1569],{"class":1366}," activation",[256,1571,435],{"class":434},[256,1573,1574],{"class":266},"'relu'",[256,1576,627],{"class":477},[256,1578,1579],{"class":1366}," input_shape",[256,1581,435],{"class":434},[256,1583,1332],{"class":430},[256,1585,478],{"class":477},[256,1587,1402],{"class":1588},"sQGkZ",[256,1590,1591],{"class":477},"[",[256,1593,1595],{"class":1594},"s1D4B","1",[256,1597,1598],{"class":477},":]))\n",[256,1600,1601],{"class":258,"line":193},[256,1602,491],{"emptyLinePlaceholder":490},[256,1604,1605],{"class":258,"line":205},[256,1606,1607],{"class":441},"# 卷积层 + 最大池化层\n",[256,1609,1610,1612,1614,1616,1618,1620,1622,1624,1626,1629,1631,1633,1635,1637,1639,1641,1643,1645,1647,1649,1651],{"class":258,"line":226},[256,1611,1526],{"class":430},[256,1613,478],{"class":477},[256,1615,1531],{"class":481},[256,1617,559],{"class":477},[256,1619,1536],{"class":481},[256,1621,559],{"class":477},[256,1623,1541],{"class":1366},[256,1625,435],{"class":434},[256,1627,1628],{"class":698},"32",[256,1630,627],{"class":477},[256,1632,1551],{"class":1366},[256,1634,435],{"class":434},[256,1636,559],{"class":477},[256,1638,1558],{"class":698},[256,1640,627],{"class":477},[256,1642,1563],{"class":698},[256,1644,1566],{"class":477},[256,1646,1569],{"class":1366},[256,1648,435],{"class":434},[256,1650,1574],{"class":266},[256,1652,644],{"class":477},[256,1654,1655,1657,1659,1661,1663,1666,1668,1671,1673,1675,1678,1680,1683],{"class":258,"line":552},[256,1656,1526],{"class":430},[256,1658,478],{"class":477},[256,1660,1531],{"class":481},[256,1662,559],{"class":477},[256,1664,1665],{"class":481},"MaxPool2D",[256,1667,559],{"class":477},[256,1669,1670],{"class":1366},"pool_size",[256,1672,435],{"class":434},[256,1674,559],{"class":477},[256,1676,1677],{"class":698},"2",[256,1679,627],{"class":477},[256,1681,1682],{"class":698}," 2",[256,1684,1685],{"class":477},")))\n",[256,1687,1688],{"class":258,"line":573},[256,1689,1690],{"class":441},"# 防止过拟合，网络正则化，随机消灭上一层的神经元\n",[256,1692,1693,1695,1697,1699,1701,1704,1706,1709,1711,1714],{"class":258,"line":579},[256,1694,1526],{"class":430},[256,1696,478],{"class":477},[256,1698,1531],{"class":481},[256,1700,559],{"class":477},[256,1702,1703],{"class":481},"Dropout",[256,1705,559],{"class":477},[256,1707,1708],{"class":1366},"rate",[256,1710,435],{"class":434},[256,1712,1713],{"class":698},"0.25",[256,1715,644],{"class":477},[256,1717,1718],{"class":258,"line":602},[256,1719,491],{"emptyLinePlaceholder":490},[256,1721,1722,1724,1726,1728,1730,1732,1734,1736,1738,1741,1743,1745,1747,1749,1751,1753,1755,1757,1759,1761,1763],{"class":258,"line":647},[256,1723,1526],{"class":430},[256,1725,478],{"class":477},[256,1727,1531],{"class":481},[256,1729,559],{"class":477},[256,1731,1536],{"class":481},[256,1733,559],{"class":477},[256,1735,1541],{"class":1366},[256,1737,435],{"class":434},[256,1739,1740],{"class":698},"64",[256,1742,627],{"class":477},[256,1744,1551],{"class":1366},[256,1746,435],{"class":434},[256,1748,559],{"class":477},[256,1750,1558],{"class":698},[256,1752,627],{"class":477},[256,1754,1563],{"class":698},[256,1756,1566],{"class":477},[256,1758,1569],{"class":1366},[256,1760,435],{"class":434},[256,1762,1574],{"class":266},[256,1764,644],{"class":477},[256,1766,1767],{"class":258,"line":668},[256,1768,491],{"emptyLinePlaceholder":490},[256,1770,1771,1773,1775,1777,1779,1781,1783,1785,1787,1789,1791,1793,1795],{"class":258,"line":704},[256,1772,1526],{"class":430},[256,1774,478],{"class":477},[256,1776,1531],{"class":481},[256,1778,559],{"class":477},[256,1780,1665],{"class":481},[256,1782,559],{"class":477},[256,1784,1670],{"class":1366},[256,1786,435],{"class":434},[256,1788,559],{"class":477},[256,1790,1677],{"class":698},[256,1792,627],{"class":477},[256,1794,1682],{"class":698},[256,1796,1685],{"class":477},[256,1798,1799,1801,1803,1805,1807,1809,1811,1813,1815,1817],{"class":258,"line":720},[256,1800,1526],{"class":430},[256,1802,478],{"class":477},[256,1804,1531],{"class":481},[256,1806,559],{"class":477},[256,1808,1703],{"class":481},[256,1810,559],{"class":477},[256,1812,1708],{"class":1366},[256,1814,435],{"class":434},[256,1816,1713],{"class":698},[256,1818,644],{"class":477},[256,1820,1821],{"class":258,"line":726},[256,1822,1823],{"class":441},"# 展平层\n",[256,1825,1826,1828,1830,1832,1834,1837],{"class":258,"line":734},[256,1827,1526],{"class":430},[256,1829,478],{"class":477},[256,1831,1531],{"class":481},[256,1833,559],{"class":477},[256,1835,1836],{"class":481},"Flatten",[256,1838,1839],{"class":477},"())\n",[256,1841,1842],{"class":258,"line":767},[256,1843,1844],{"class":441},"# 密集连接层\n",[256,1846,1847,1849,1851,1853,1855,1858,1860,1863,1865,1867,1869,1871],{"class":258,"line":795},[256,1848,1526],{"class":430},[256,1850,478],{"class":477},[256,1852,1531],{"class":481},[256,1854,559],{"class":477},[256,1856,1857],{"class":481},"Dense",[256,1859,559],{"class":477},[256,1861,1862],{"class":698},"512",[256,1864,627],{"class":477},[256,1866,1569],{"class":1366},[256,1868,435],{"class":434},[256,1870,1574],{"class":266},[256,1872,644],{"class":477},[256,1874,1875,1877,1879,1881,1883,1885,1887,1889,1891,1894],{"class":258,"line":817},[256,1876,1526],{"class":430},[256,1878,478],{"class":477},[256,1880,1531],{"class":481},[256,1882,559],{"class":477},[256,1884,1703],{"class":481},[256,1886,559],{"class":477},[256,1888,1708],{"class":1366},[256,1890,435],{"class":434},[256,1892,1893],{"class":698},"0.5",[256,1895,644],{"class":477},[256,1897,1898],{"class":258,"line":834},[256,1899,1900],{"class":441},"# 全连接 + 输出层\n",[256,1902,1903,1905,1907,1909,1911,1913,1915,1918,1920,1922,1924,1927],{"class":258,"line":850},[256,1904,1526],{"class":430},[256,1906,478],{"class":477},[256,1908,1531],{"class":481},[256,1910,559],{"class":477},[256,1912,1857],{"class":481},[256,1914,559],{"class":477},[256,1916,1917],{"class":698},"43",[256,1919,627],{"class":477},[256,1921,1569],{"class":1366},[256,1923,435],{"class":434},[256,1925,1926],{"class":266},"'softmax'",[256,1928,644],{"class":477},[256,1930,1931],{"class":258,"line":862},[256,1932,491],{"emptyLinePlaceholder":490},[256,1934,1935],{"class":258,"line":875},[256,1936,1937],{"class":441},"# 编译模型 分类交叉熵损失函数 Adam优化器 这种搭配常用在多元分类中\n",[256,1939,1940,1942,1944,1947,1949,1952,1954,1957,1959,1962,1964,1967,1969,1972,1974,1976,1979],{"class":258,"line":880},[256,1941,1526],{"class":430},[256,1943,478],{"class":477},[256,1945,1946],{"class":481},"compile",[256,1948,559],{"class":477},[256,1950,1951],{"class":1366},"loss",[256,1953,435],{"class":434},[256,1955,1956],{"class":266},"'categorical_crossentropy'",[256,1958,627],{"class":477},[256,1960,1961],{"class":1366}," optimizer",[256,1963,435],{"class":434},[256,1965,1966],{"class":266},"'adam'",[256,1968,627],{"class":477},[256,1970,1971],{"class":1366}," metrics",[256,1973,435],{"class":434},[256,1975,1591],{"class":477},[256,1977,1978],{"class":266},"'accuracy'",[256,1980,1981],{"class":477},"])\n",[10,1983,1984,2025],{},[13,1985,1986,1987,1990,1991,1994,1995,1998,1999,1998,2002,1998,2005,2007,2008,1998,2011,1998,2013,1998,2016,1998,2019,1998,2021,2024],{},"首先将模型 ",[142,1988,1989],{"code":1989},"序列化","，然后依次添加 ",[142,1992,1993],{"code":1993},"卷积输入层","，",[142,1996,1997],{"code":1997},"卷积层","， ",[142,2000,2001],{"code":2001},"最大池化层",[142,2003,2004],{"code":2004},"正则化层",[142,2006,1997],{"code":1997}," ，",[142,2009,2010],{"code":2010},"池化层",[142,2012,2004],{"code":2004},[142,2014,2015],{"code":2015},"展平层",[142,2017,2018],{"code":2018},"密集连接层",[142,2020,2004],{"code":2004},[142,2022,2023],{"code":2023},"输出层","。",[13,2026,2027],{},"然后编译模型。",[40,2029,2030],{"id":2030},"训练模型",[247,2032,2034],{"className":421,"code":2033,"language":423,"meta":252,"style":252},"epochs = 11\ntensorboard = TensorBoard(log_dir='.\u002Flog', histogram_freq=1, write_graph=True, write_images=True, update_freq=\"epoch\")\n\nhistory = model.fit(X_train, y_train, batch_size=32, epochs=epochs, validation_data=(X_test, y_test),\n                    callbacks=[tensorboard])\nmodel.save(\"my_traffic_classifier.h5\")\n",[142,2035,2036,2046,2106,2110,2171,2185],{"__ignoreMap":252},[256,2037,2038,2041,2043],{"class":258,"line":259},[256,2039,2040],{"class":430},"epochs ",[256,2042,435],{"class":434},[256,2044,2045],{"class":698}," 11\n",[256,2047,2048,2051,2053,2056,2058,2061,2063,2066,2068,2071,2073,2075,2077,2080,2082,2085,2087,2090,2092,2094,2096,2099,2101,2104],{"class":258,"line":332},[256,2049,2050],{"class":430},"tensorboard ",[256,2052,435],{"class":434},[256,2054,2055],{"class":481}," TensorBoard",[256,2057,559],{"class":477},[256,2059,2060],{"class":1366},"log_dir",[256,2062,435],{"class":434},[256,2064,2065],{"class":266},"'.\u002Flog'",[256,2067,627],{"class":477},[256,2069,2070],{"class":1366}," histogram_freq",[256,2072,435],{"class":434},[256,2074,1595],{"class":698},[256,2076,627],{"class":477},[256,2078,2079],{"class":1366}," write_graph",[256,2081,435],{"class":434},[256,2083,2084],{"class":698},"True",[256,2086,627],{"class":477},[256,2088,2089],{"class":1366}," write_images",[256,2091,435],{"class":434},[256,2093,2084],{"class":698},[256,2095,627],{"class":477},[256,2097,2098],{"class":1366}," update_freq",[256,2100,435],{"class":434},[256,2102,2103],{"class":266},"\"epoch\"",[256,2105,570],{"class":477},[256,2107,2108],{"class":258,"line":164},[256,2109,491],{"emptyLinePlaceholder":490},[256,2111,2112,2115,2117,2120,2122,2125,2127,2129,2131,2133,2135,2138,2140,2142,2144,2147,2149,2152,2154,2157,2159,2161,2164,2166,2168],{"class":258,"line":177},[256,2113,2114],{"class":430},"history ",[256,2116,435],{"class":434},[256,2118,2119],{"class":430}," model",[256,2121,478],{"class":477},[256,2123,2124],{"class":481},"fit",[256,2126,559],{"class":477},[256,2128,1332],{"class":430},[256,2130,627],{"class":477},[256,2132,1342],{"class":430},[256,2134,627],{"class":477},[256,2136,2137],{"class":1366}," batch_size",[256,2139,435],{"class":434},[256,2141,1628],{"class":698},[256,2143,627],{"class":477},[256,2145,2146],{"class":1366}," epochs",[256,2148,435],{"class":434},[256,2150,2151],{"class":430},"epochs",[256,2153,627],{"class":477},[256,2155,2156],{"class":1366}," validation_data",[256,2158,435],{"class":434},[256,2160,559],{"class":477},[256,2162,2163],{"class":430},"X_test",[256,2165,627],{"class":477},[256,2167,1423],{"class":430},[256,2169,2170],{"class":477},"),\n",[256,2172,2173,2176,2178,2180,2183],{"class":258,"line":193},[256,2174,2175],{"class":1366},"                    callbacks",[256,2177,435],{"class":434},[256,2179,1591],{"class":477},[256,2181,2182],{"class":430},"tensorboard",[256,2184,1981],{"class":477},[256,2186,2187,2189,2191,2194,2196,2199],{"class":258,"line":205},[256,2188,1526],{"class":430},[256,2190,478],{"class":477},[256,2192,2193],{"class":481},"save",[256,2195,559],{"class":477},[256,2197,2198],{"class":266},"\"my_traffic_classifier.h5\"",[256,2200,570],{"class":477},[10,2202,2203],{},[13,2204,1215,2205,2208],{},[142,2206,2207],{"code":2207},"11"," 个迭代用数据训练模型，完成后保存训练后的模型。",[40,2210,2211],{"id":2211},"绘制图像",[247,2213,2215],{"className":421,"code":2214,"language":423,"meta":252,"style":252},"# 绘制图形以确保准确性\nplt.figure(0)\n# 训练集准确率\nplt.plot(history.history['accuracy'], label='training accuracy')\n# 测试集准确率\nplt.plot(history.history['val_accuracy'], label='val accuracy')\nplt.title('acc')\nplt.xlabel('epochs')\nplt.ylabel('accuracy')\nplt.legend()\nplt.show()\n\nplt.figure(1)\nplt.plot(history.history['loss'], label='training loss')\nplt.plot(history.history['val_loss'], label='val loss')\nplt.title('Loss')\nplt.xlabel('epochs')\nplt.ylabel('loss')\nplt.legend()\nplt.show()\n",[142,2216,2217,2222,2239,2244,2285,2290,2326,2342,2358,2373,2384,2395,2399,2413,2448,2484,2499,2513,2528,2538],{"__ignoreMap":252},[256,2218,2219],{"class":258,"line":259},[256,2220,2221],{"class":441},"# 绘制图形以确保准确性\n",[256,2223,2224,2227,2229,2232,2234,2237],{"class":258,"line":332},[256,2225,2226],{"class":430},"plt",[256,2228,478],{"class":477},[256,2230,2231],{"class":481},"figure",[256,2233,559],{"class":477},[256,2235,2236],{"class":698},"0",[256,2238,570],{"class":477},[256,2240,2241],{"class":258,"line":164},[256,2242,2243],{"class":441},"# 训练集准确率\n",[256,2245,2246,2248,2250,2253,2255,2258,2260,2262,2264,2266,2270,2272,2275,2278,2280,2283],{"class":258,"line":177},[256,2247,2226],{"class":430},[256,2249,478],{"class":477},[256,2251,2252],{"class":481},"plot",[256,2254,559],{"class":477},[256,2256,2257],{"class":430},"history",[256,2259,478],{"class":477},[256,2261,2257],{"class":1588},[256,2263,1591],{"class":477},[256,2265,1088],{"class":266},[256,2267,2269],{"class":2268},"s2-b8","accuracy",[256,2271,1088],{"class":266},[256,2273,2274],{"class":477},"],",[256,2276,2277],{"class":1366}," label",[256,2279,435],{"class":434},[256,2281,2282],{"class":266},"'training accuracy'",[256,2284,570],{"class":477},[256,2286,2287],{"class":258,"line":193},[256,2288,2289],{"class":441},"# 测试集准确率\n",[256,2291,2292,2294,2296,2298,2300,2302,2304,2306,2308,2310,2313,2315,2317,2319,2321,2324],{"class":258,"line":205},[256,2293,2226],{"class":430},[256,2295,478],{"class":477},[256,2297,2252],{"class":481},[256,2299,559],{"class":477},[256,2301,2257],{"class":430},[256,2303,478],{"class":477},[256,2305,2257],{"class":1588},[256,2307,1591],{"class":477},[256,2309,1088],{"class":266},[256,2311,2312],{"class":2268},"val_accuracy",[256,2314,1088],{"class":266},[256,2316,2274],{"class":477},[256,2318,2277],{"class":1366},[256,2320,435],{"class":434},[256,2322,2323],{"class":266},"'val accuracy'",[256,2325,570],{"class":477},[256,2327,2328,2330,2332,2335,2337,2340],{"class":258,"line":226},[256,2329,2226],{"class":430},[256,2331,478],{"class":477},[256,2333,2334],{"class":481},"title",[256,2336,559],{"class":477},[256,2338,2339],{"class":266},"'acc'",[256,2341,570],{"class":477},[256,2343,2344,2346,2348,2351,2353,2356],{"class":258,"line":552},[256,2345,2226],{"class":430},[256,2347,478],{"class":477},[256,2349,2350],{"class":481},"xlabel",[256,2352,559],{"class":477},[256,2354,2355],{"class":266},"'epochs'",[256,2357,570],{"class":477},[256,2359,2360,2362,2364,2367,2369,2371],{"class":258,"line":573},[256,2361,2226],{"class":430},[256,2363,478],{"class":477},[256,2365,2366],{"class":481},"ylabel",[256,2368,559],{"class":477},[256,2370,1978],{"class":266},[256,2372,570],{"class":477},[256,2374,2375,2377,2379,2382],{"class":258,"line":579},[256,2376,2226],{"class":430},[256,2378,478],{"class":477},[256,2380,2381],{"class":481},"legend",[256,2383,485],{"class":477},[256,2385,2386,2388,2390,2393],{"class":258,"line":602},[256,2387,2226],{"class":430},[256,2389,478],{"class":477},[256,2391,2392],{"class":481},"show",[256,2394,485],{"class":477},[256,2396,2397],{"class":258,"line":647},[256,2398,491],{"emptyLinePlaceholder":490},[256,2400,2401,2403,2405,2407,2409,2411],{"class":258,"line":668},[256,2402,2226],{"class":430},[256,2404,478],{"class":477},[256,2406,2231],{"class":481},[256,2408,559],{"class":477},[256,2410,1595],{"class":698},[256,2412,570],{"class":477},[256,2414,2415,2417,2419,2421,2423,2425,2427,2429,2431,2433,2435,2437,2439,2441,2443,2446],{"class":258,"line":704},[256,2416,2226],{"class":430},[256,2418,478],{"class":477},[256,2420,2252],{"class":481},[256,2422,559],{"class":477},[256,2424,2257],{"class":430},[256,2426,478],{"class":477},[256,2428,2257],{"class":1588},[256,2430,1591],{"class":477},[256,2432,1088],{"class":266},[256,2434,1951],{"class":2268},[256,2436,1088],{"class":266},[256,2438,2274],{"class":477},[256,2440,2277],{"class":1366},[256,2442,435],{"class":434},[256,2444,2445],{"class":266},"'training loss'",[256,2447,570],{"class":477},[256,2449,2450,2452,2454,2456,2458,2460,2462,2464,2466,2468,2471,2473,2475,2477,2479,2482],{"class":258,"line":720},[256,2451,2226],{"class":430},[256,2453,478],{"class":477},[256,2455,2252],{"class":481},[256,2457,559],{"class":477},[256,2459,2257],{"class":430},[256,2461,478],{"class":477},[256,2463,2257],{"class":1588},[256,2465,1591],{"class":477},[256,2467,1088],{"class":266},[256,2469,2470],{"class":2268},"val_loss",[256,2472,1088],{"class":266},[256,2474,2274],{"class":477},[256,2476,2277],{"class":1366},[256,2478,435],{"class":434},[256,2480,2481],{"class":266},"'val loss'",[256,2483,570],{"class":477},[256,2485,2486,2488,2490,2492,2494,2497],{"class":258,"line":726},[256,2487,2226],{"class":430},[256,2489,478],{"class":477},[256,2491,2334],{"class":481},[256,2493,559],{"class":477},[256,2495,2496],{"class":266},"'Loss'",[256,2498,570],{"class":477},[256,2500,2501,2503,2505,2507,2509,2511],{"class":258,"line":734},[256,2502,2226],{"class":430},[256,2504,478],{"class":477},[256,2506,2350],{"class":481},[256,2508,559],{"class":477},[256,2510,2355],{"class":266},[256,2512,570],{"class":477},[256,2514,2515,2517,2519,2521,2523,2526],{"class":258,"line":767},[256,2516,2226],{"class":430},[256,2518,478],{"class":477},[256,2520,2366],{"class":481},[256,2522,559],{"class":477},[256,2524,2525],{"class":266},"'loss'",[256,2527,570],{"class":477},[256,2529,2530,2532,2534,2536],{"class":258,"line":795},[256,2531,2226],{"class":430},[256,2533,478],{"class":477},[256,2535,2381],{"class":481},[256,2537,485],{"class":477},[256,2539,2540,2542,2544,2546],{"class":258,"line":817},[256,2541,2226],{"class":430},[256,2543,478],{"class":477},[256,2545,2392],{"class":481},[256,2547,485],{"class":477},[10,2549,2550],{},[13,2551,2552,2553,2556],{},"用 ",[142,2554,2555],{"code":2555},"matplotlib"," 工具绘制准确率以及损失函数图像。",[40,2558,2559],{"id":2559},"验证准确率",[247,2561,2563],{"className":421,"code":2562,"language":423,"meta":252,"style":252},"# 测试数据集的测试准确性\n\ny_test = pd.read_csv('data\u002FTest.csv')\n\nlabels = y_test[\"ClassId\"].values\nimgs = y_test[\"Path\"].values\n\ndata = []\n\nfor img in imgs:\n    image = Image.open(img)\n    image = image.resize((30, 30))\n    data.append(np.array(image))\n\nX_test = np.array(data)\n\npred = model.predict_classes(X_test)\n\n# 测试数据的准确性\nprint(accuracy_score(labels, pred))\n",[142,2564,2565,2570,2574,2595,2599,2623,2645,2649,2658,2662,2676,2696,2718,2742,2746,2765,2769,2789,2793,2798],{"__ignoreMap":252},[256,2566,2567],{"class":258,"line":259},[256,2568,2569],{"class":441},"# 测试数据集的测试准确性\n",[256,2571,2572],{"class":258,"line":332},[256,2573,491],{"emptyLinePlaceholder":490},[256,2575,2576,2578,2580,2583,2585,2588,2590,2593],{"class":258,"line":164},[256,2577,1465],{"class":430},[256,2579,435],{"class":434},[256,2581,2582],{"class":430}," pd",[256,2584,478],{"class":477},[256,2586,2587],{"class":481},"read_csv",[256,2589,559],{"class":477},[256,2591,2592],{"class":266},"'data\u002FTest.csv'",[256,2594,570],{"class":477},[256,2596,2597],{"class":258,"line":177},[256,2598,491],{"emptyLinePlaceholder":490},[256,2600,2601,2603,2605,2607,2609,2612,2615,2617,2620],{"class":258,"line":193},[256,2602,1281],{"class":430},[256,2604,435],{"class":434},[256,2606,1423],{"class":1588},[256,2608,1591],{"class":477},[256,2610,2611],{"class":266},"\"",[256,2613,2614],{"class":2268},"ClassId",[256,2616,2611],{"class":266},[256,2618,2619],{"class":477},"].",[256,2621,2622],{"class":430},"values\n",[256,2624,2625,2628,2630,2632,2634,2636,2639,2641,2643],{"class":258,"line":205},[256,2626,2627],{"class":430},"imgs ",[256,2629,435],{"class":434},[256,2631,1423],{"class":1588},[256,2633,1591],{"class":477},[256,2635,2611],{"class":266},[256,2637,2638],{"class":2268},"Path",[256,2640,2611],{"class":266},[256,2642,2619],{"class":477},[256,2644,2622],{"class":430},[256,2646,2647],{"class":258,"line":226},[256,2648,491],{"emptyLinePlaceholder":490},[256,2650,2651,2653,2655],{"class":258,"line":552},[256,2652,1262],{"class":430},[256,2654,435],{"class":434},[256,2656,2657],{"class":477}," []\n",[256,2659,2660],{"class":258,"line":573},[256,2661,491],{"emptyLinePlaceholder":490},[256,2663,2664,2666,2669,2671,2674],{"class":258,"line":579},[256,2665,1224],{"class":510},[256,2667,2668],{"class":430}," img ",[256,2670,588],{"class":510},[256,2672,2673],{"class":430}," imgs",[256,2675,522],{"class":477},[256,2677,2678,2681,2683,2685,2687,2689,2691,2694],{"class":258,"line":602},[256,2679,2680],{"class":430},"    image ",[256,2682,435],{"class":434},[256,2684,742],{"class":430},[256,2686,478],{"class":477},[256,2688,747],{"class":481},[256,2690,559],{"class":477},[256,2692,2693],{"class":430},"img",[256,2695,570],{"class":477},[256,2697,2698,2700,2702,2704,2706,2708,2710,2712,2714,2716],{"class":258,"line":647},[256,2699,2680],{"class":430},[256,2701,435],{"class":434},[256,2703,774],{"class":430},[256,2705,478],{"class":477},[256,2707,779],{"class":481},[256,2709,782],{"class":477},[256,2711,785],{"class":698},[256,2713,627],{"class":477},[256,2715,790],{"class":698},[256,2717,644],{"class":477},[256,2719,2720,2723,2725,2727,2729,2732,2734,2736,2738,2740],{"class":258,"line":668},[256,2721,2722],{"class":430},"    data",[256,2724,478],{"class":477},[256,2726,825],{"class":481},[256,2728,559],{"class":477},[256,2730,2731],{"class":430},"np",[256,2733,478],{"class":477},[256,2735,807],{"class":481},[256,2737,559],{"class":477},[256,2739,812],{"class":430},[256,2741,644],{"class":477},[256,2743,2744],{"class":258,"line":704},[256,2745,491],{"emptyLinePlaceholder":490},[256,2747,2748,2751,2753,2755,2757,2759,2761,2763],{"class":258,"line":720},[256,2749,2750],{"class":430},"X_test ",[256,2752,435],{"class":434},[256,2754,802],{"class":430},[256,2756,478],{"class":477},[256,2758,807],{"class":481},[256,2760,559],{"class":477},[256,2762,1228],{"class":430},[256,2764,570],{"class":477},[256,2766,2767],{"class":258,"line":726},[256,2768,491],{"emptyLinePlaceholder":490},[256,2770,2771,2774,2776,2778,2780,2783,2785,2787],{"class":258,"line":734},[256,2772,2773],{"class":430},"pred ",[256,2775,435],{"class":434},[256,2777,2119],{"class":430},[256,2779,478],{"class":477},[256,2781,2782],{"class":481},"predict_classes",[256,2784,559],{"class":477},[256,2786,2163],{"class":430},[256,2788,570],{"class":477},[256,2790,2791],{"class":258,"line":767},[256,2792,491],{"emptyLinePlaceholder":490},[256,2794,2795],{"class":258,"line":795},[256,2796,2797],{"class":441},"# 测试数据的准确性\n",[256,2799,2800,2802,2804,2807,2809,2811,2813,2816],{"class":258,"line":817},[256,2801,1393],{"class":555},[256,2803,559],{"class":477},[256,2805,2806],{"class":481},"accuracy_score",[256,2808,559],{"class":477},[256,2810,1246],{"class":430},[256,2812,627],{"class":477},[256,2814,2815],{"class":430}," pred",[256,2817,644],{"class":477},[10,2819,2820],{},[13,2821,2822],{},"读取从未被神经网络学习过的新数据，以验证识别准确率。",[2824,2825,2826],"style",{},"html pre.shiki code .seVD2, html code.shiki .seVD2{--shiki-default:#1E66F5;--shiki-default-font-style:italic;--shiki-dark:#61AFEF;--shiki-dark-font-style:inherit}html pre.shiki code .sw_MA, html code.shiki .sw_MA{--shiki-default:#40A02B;--shiki-dark:#98C379}html pre.shiki code .sel-X, html code.shiki .sel-X{--shiki-default:#40A02B;--shiki-dark:#D19A66}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sa2x1, html code.shiki .sa2x1{--shiki-default:#4C4F69;--shiki-dark:#ABB2BF}html pre.shiki code .sqgB4, html code.shiki .sqgB4{--shiki-default:#179299;--shiki-dark:#56B6C2}html pre.shiki code .skYY2, html code.shiki .skYY2{--shiki-default:#7C7F93;--shiki-default-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic}html pre.shiki code .sgT6j, html code.shiki .sgT6j{--shiki-default:#7C7F93;--shiki-dark:#ABB2BF}html pre.shiki code .s3w6o, html code.shiki .s3w6o{--shiki-default:#1E66F5;--shiki-dark:#61AFEF}html pre.shiki code .sSWcl, html code.shiki .sSWcl{--shiki-default:#8839EF;--shiki-dark:#C678DD}html pre.shiki code .sk-YW, html code.shiki .sk-YW{--shiki-default:#FE640B;--shiki-default-font-style:italic;--shiki-dark:#56B6C2;--shiki-dark-font-style:inherit}html pre.shiki code .s0gAL, html code.shiki .s0gAL{--shiki-default:#8839EF;--shiki-default-font-style:italic;--shiki-dark:#56B6C2;--shiki-dark-font-style:inherit}html pre.shiki code .sxrzW, html code.shiki .sxrzW{--shiki-default:#EA76CB;--shiki-dark:#D19A66}html pre.shiki code .sYQis, html code.shiki .sYQis{--shiki-default:#FE640B;--shiki-dark:#D19A66}html pre.shiki code .siVku, html code.shiki .siVku{--shiki-default:#FE640B;--shiki-default-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:inherit}html pre.shiki code .sFWNk, html code.shiki .sFWNk{--shiki-default:#EA76CB;--shiki-dark:#56B6C2}html pre.shiki code .sddMY, html code.shiki .sddMY{--shiki-default:#E64553;--shiki-default-font-style:italic;--shiki-dark:#E06C75;--shiki-dark-font-style:italic}html pre.shiki code .sQGkZ, html code.shiki .sQGkZ{--shiki-default:#E64553;--shiki-default-font-style:italic;--shiki-dark:#ABB2BF;--shiki-dark-font-style:inherit}html pre.shiki code .s1D4B, html code.shiki .s1D4B{--shiki-default:#FE640B;--shiki-default-font-style:italic;--shiki-dark:#D19A66;--shiki-dark-font-style:inherit}html pre.shiki code .s2-b8, html code.shiki .s2-b8{--shiki-default:#40A02B;--shiki-default-font-style:italic;--shiki-dark:#98C379;--shiki-dark-font-style:inherit}",{"title":252,"searchDepth":177,"depth":177,"links":2828},[2829,2834,2839,2843],{"id":38,"depth":332,"text":38,"children":2830},[2831,2832,2833],{"id":42,"depth":164,"text":43},{"id":92,"depth":164,"text":93},{"id":105,"depth":164,"text":106},{"id":118,"depth":332,"text":118,"children":2835},[2836,2837,2838],{"id":134,"depth":164,"text":135},{"id":238,"depth":164,"text":238},{"id":286,"depth":164,"text":286},{"id":318,"depth":332,"text":318,"children":2840},[2841,2842],{"id":321,"depth":164,"text":321},{"id":360,"depth":164,"text":360},{"id":414,"depth":332,"text":415,"children":2844},[2845,2846,2847,2848,2849,2850],{"id":418,"depth":164,"text":418},{"id":1312,"depth":164,"text":1312},{"id":1493,"depth":164,"text":1494},{"id":2030,"depth":164,"text":2030},{"id":2211,"depth":164,"text":2211},{"id":2559,"depth":164,"text":2559},[2852],"开发","2025-11-01 12:37:11","基于CNN深度学习的交通标志识别系统，采用TensorFlow\u002FKeras构建卷积神经网络模型，实现高达95%的识别准确率。项目使用Python开发，配备tkinter图形界面，支持图片上传与实时识别。包含完整训练数据集处理、模型训练与评估流程，代码开源，适用于深度学习入门与计算机视觉实践。项目源码托管于GitHub与Gitee。",false,"md","https:\u002F\u002Ffile.dhbxs.top\u002F2025\u002F10\u002Fybfbhwfk.webp",{"slots":2859},{},"\u002Fposts\u002F4dCtXKfh",null,{"text":2863,"minutes":2864,"time":2865,"words":2866},"9 min read",8.59,515400,1718,0,{"title":5,"description":2854},{"loc":2860},"posts\u002F2025\u002F基于CNN深度学习网络的交通标志识别",[2872,2873],"深度学习","CNN","tech","4aaFGTHiFh8JP9WL3p4s-xtHkzheaWS9fjjgKuPSZ8c",[2877,2882],{"title":2878,"path":2879,"stem":2880,"date":2881,"type":2874,"children":-1},"策略模式优化多重判断","\u002Fposts\u002Fb0439536","posts\u002F2025\u002F策略模式优化多重判断","2025-10-16",{"title":2883,"path":2884,"stem":2885,"date":2886,"type":2874,"children":-1},"LangChain4j工具调用中断引发JSON格式报错的问题调查","\u002Fposts\u002F4c27c0e","posts\u002F2025\u002FLangChain4j工具调用中断引发JSON格式报错的问题调查","2025-11-01 16:37:52",1775740823742]