88 from typing import Tuple
99 from datetime import datetime
1010except ImportError :
11- raise "🥹无法安装配件"
11+ raise ImportError ( "🥹无法安装配件" )
1212finally :
1313 pass
1414
1515class 华佗AI :
16- def __init__ (self ) -> None :
16+ def __init__ (self , 展示 : bool ) -> None :
1717 super (华佗AI , self ).__init__ ()
1818
1919 matplotlib .rcParams ["font.family" ] = "Heiti TC"
2020
21+ self .名称 : str = "华佗AI"
22+ self .展示 :bool = 展示
2123 self .图片文件 = "./data/images/"
2224 self .seed :int = 21
2325 self .图像高度 :int = 32
@@ -32,68 +34,73 @@ def __init__(self) -> None:
3234 "人参片"
3335 ]
3436 self .优化器 :str | None = "adam"
35- self .纪元 :int = 10
37+ self .纪元 :int = 5
3638
3739 def 训练数据 (self ) -> None :
3840 self .记录 (信息 = "TensorFlow 版本 |> {}" .format (tf .__version__ ))
3941
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
42+ try :
43+ if os .path .exists (self .图片文件 ):
44+ 训练目录 :tensorflow .python .data .ops .batch_op ._BatchDataset = tf .keras .utils .image_dataset_from_directory (
45+ self .图片文件 ,
46+ image_size = (self .图像高度 , self .图像宽度 ),
47+ batch_size = self .批量的大小
48+ )
49+
50+ 估价目录 :tensorflow .python .data .ops .batch_op ._BatchDataset = tf .keras .utils .image_dataset_from_directory (
51+ self .图片文件 ,
52+ image_size = (self .图像高度 , self .图像宽度 ),
53+ batch_size = self .批量的大小
54+ )
55+
56+ 测试目录 :tensorflow .python .data .ops .batch_op ._BatchDataset = tf .keras .utils .image_dataset_from_directory (
57+ self .图片文件 ,
58+ image_size = (self .图像高度 , self .图像宽度 ),
59+ batch_size = self .批量的大小
60+ )
61+
62+ if self .展示 :
63+ 图表 .figure (figsize = (6 , 6 ))
64+ 图表 .suptitle (self .名称 )
65+
66+ for 照片 , 名称 in 训练目录 .take (1 ):
67+ for 药 in range (9 ):
68+ 图表 .subplot (3 , 3 , (药 + 1 ))
69+ 图表 .imshow (照片 [药 ].numpy ().astype ("uint8" ))
70+ 图表 .title (label = self .中药材料 [名称 [药 ]], fontsize = 10 , color = "green" )
71+ 图表 .axis (self .轴 )
72+
73+ if self .展示 : 图表 .show ()
74+
75+ 训练模型 = tf .keras .Sequential (
76+ [
77+ tf .keras .layers .Rescaling (1. / 255 ),
78+ tf .keras .layers .Conv2D (32 , 1 , activation = self .活化 ),
79+ tf .keras .layers .MaxPool2D (),
80+ tf .keras .layers .Conv2D (32 , 1 , activation = self .活化 ),
81+ tf .keras .layers .MaxPool2D (),
82+ tf .keras .layers .Conv2D (32 , 1 , activation = self .活化 ),
83+ tf .keras .layers .MaxPool2D (),
84+ tf .keras .layers .Flatten (),
85+ tf .keras .layers .Dense (128 , activation = self .活化 )
86+ ]
87+ )
88+
89+ 训练模型 .compile (
90+ optimizer = "adam" ,
91+ loss = tf .losses .SparseCategoricalCrossentropy (from_logits = True ),
92+ metrics = ["accuracy" ]
93+ )
94+
95+ 训练模型 .fit (训练目录 , validation_data = 训练目录 , epochs = self .纪元 )
96+
97+ # print(训练模型)
98+ else :
99+ self .记录 (信息 = f"{ self .图片文件 } 不存在" )
100+ except Exception as e :
101+ raise e
102+ finally :
103+ pass
97104
98105 def 记录 (self , 信息 : str ) -> None :
99106 现在 :object = datetime .now ()
@@ -102,5 +109,5 @@ def 记录(self, 信息: str) -> None:
102109 print (f"华佗AI[{ 目前时间 } ] { str (信息 )} " )
103110
104111if __name__ == "__main__" :
105- huatuoAi = 华佗AI ()
112+ huatuoAi = 华佗AI (展示 = True )
106113 huatuoAi .训练数据 ()
0 commit comments