1+ # -*- coding: UTF-8 -*-
2+ try :
3+ import os
4+ import tensorflow as tf
5+ import numpy as np
6+ import matplotlib
7+ import matplotlib .pyplot as 图表
8+ from typing import Tuple
9+ from datetime import datetime
10+ except ImportError :
11+ raise "🥹无法安装配件"
12+ finally :
13+ pass
14+
15+ class 华佗AI :
16+ def __init__ (self ) -> None :
17+ super (华佗AI , self ).__init__ ()
18+
19+ matplotlib .rcParams ["font.family" ] = "Heiti TC"
20+
21+ self .图片文件 = "./data/images/"
22+ self .seed :int = 21
23+ self .图像高度 :int = 32
24+ self .图像宽度 :int = 32
25+ self .批量的大小 :int = 20
26+ self .轴 :str | None = "off"
27+ self .活化 :str | None = "relu"
28+ self .中药材料 :list | any = [
29+ "丁公藤" ,
30+ "金银花" ,
31+ "罗汉果" ,
32+ "人参片"
33+ ]
34+ self .优化器 :str | None = "adam"
35+ self .纪元 :int = 10
36+
37+ def 训练数据 (self ) -> None :
38+ self .记录 (信息 = "TensorFlow 版本 |> {}" .format (tf .__version__ ))
39+
40+ if os .path .exists (self .图片文件 ):
41+ 训练目录 :tensorflow .python .data .ops .batch_op ._BatchDataset = tf .keras .utils .image_dataset_from_directory (
42+ self .图片文件 ,
43+ image_size = (self .图像高度 , self .图像宽度 ),
44+ batch_size = self .批量的大小
45+ )
46+
47+ 估价目录 :tensorflow .python .data .ops .batch_op ._BatchDataset = tf .keras .utils .image_dataset_from_directory (
48+ self .图片文件 ,
49+ image_size = (self .图像高度 , self .图像宽度 ),
50+ batch_size = self .批量的大小
51+ )
52+
53+ 测试目录 :tensorflow .python .data .ops .batch_op ._BatchDataset = tf .keras .utils .image_dataset_from_directory (
54+ self .图片文件 ,
55+ image_size = (self .图像高度 , self .图像宽度 ),
56+ batch_size = self .批量的大小
57+ )
58+
59+ 图表 .figure (figsize = (10 , 10 ))
60+
61+
62+ for 照片 , 名称 in 训练目录 .take (1 ):
63+ for 药 in range (9 ):
64+ 图表 .subplot (3 , 3 , (药 + 1 ))
65+ 图表 .imshow (照片 [药 ].numpy ().astype ("uint8" ))
66+ 图表 .title (label = self .中药材料 [名称 [药 ]], fontsize = 10 , color = "green" )
67+ 图表 .axis (self .轴 )
68+
69+ 训练模型 = tf .keras .Sequential (
70+ [
71+ tf .keras .layers .Rescaling (1. / 255 ),
72+ tf .keras .layers .Conv2D (32 , 3 , activation = self .活化 ),
73+ tf .keras .layers .MaxPool2D (),
74+ tf .keras .layers .Conv2D (32 , 3 , activation = self .活化 ),
75+ tf .keras .layers .MaxPool2D (),
76+ tf .keras .layers .Conv2D (32 , 3 , activation = self .活化 ),
77+ tf .keras .layers .MaxPool2D (),
78+ tf .keras .layers .Flatten (),
79+ tf .keras .layers .Dense (128 , activation = self .活化 ),
80+ tf .keras .layers .Dense (2 )
81+ ]
82+ )
83+
84+ 训练模型 .compile (
85+ optimizer = self .优化器 ,
86+ loss = tf .losses .SparseCategoricalCrossentropy (from_logits = True ),
87+ metrics = ["accuracy" ]
88+ )
89+
90+ 训练模型 .fit (训练目录 , validation_data = 训练目录 , epochs = self .纪元 )
91+ else :
92+ self .记录 (信息 = f"{ self .图片文件 } 不存在" )
93+ return
94+
95+ def 加载数据 (self ) -> None :
96+ 中药材料 = None
97+
98+ def 记录 (self , 信息 : str ) -> None :
99+ 现在 :object = datetime .now ()
100+ 目前时间 :object = 现在 .strftime ("%H:%M:%S" )
101+
102+ print (f"华佗AI[{ 目前时间 } ] { str (信息 )} " )
103+
104+ if __name__ == "__main__" :
105+ huatuoAi = 华佗AI ()
106+ huatuoAi .训练数据 ()
0 commit comments