From 101fd8cef015d557e7d8cf36b92e8989aadb5083 Mon Sep 17 00:00:00 2001
From: pyhqos7bg <wangwei_jmu@163.com>
Date: Thu, 30 May 2024 15:18:22 +0800
Subject: [PATCH] ADD file via upload

---
 train_model.py | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 53 insertions(+)
 create mode 100644 train_model.py

diff --git a/train_model.py b/train_model.py
new file mode 100644
index 0000000..82b4ecd
--- /dev/null
+++ b/train_model.py
@@ -0,0 +1,53 @@
+import paddle.fluid as fluid
+from 口罩检测.VGGNet import VGGNet
+import  paddle as paddle
+from 口罩检测.util import train_parameters,draw_process,draw_train_process
+from 口罩检测.generate_data import custom_reader
+import numpy as np
+
+all_train_iter=0
+all_train_iters=[]
+all_train_costs=[]
+all_train_accs=[]
+
+train_reader = paddle.batch(custom_reader(train_parameters['train_list_path']),
+                            batch_size=train_parameters['train_batch_size'],
+                            drop_last=True)
+with fluid.dygraph.guard():
+    print(train_parameters['class_dim'])
+    print(train_parameters['label_dict'])
+    vgg =VGGNet()
+    optimizer = fluid.optimizer.AdamOptimizer(learning_rate=train_parameters['learning_stategry']['lr'],parameter_list=vgg.parameters())
+    for epoch_num in range(train_parameters['num_epochs']):
+        for batch_id,data in enumerate(train_reader()):
+            x_data = np.array([x[0] for x in data]).astype('float32')
+            label = np.array([x[1] for x in data]).astype('int64')
+            label = label[:,np.newaxis]
+
+            img = fluid.dygraph.to_variable(x_data)
+            label = fluid.dygraph.to_variable(label)
+            out,acc = vgg(img,label)
+            loss = fluid.layers.cross_entropy(out,label)
+            avg_loss = fluid.layers.mean(loss)
+
+            avg_loss.backward()
+            optimizer.minimize(avg_loss)
+            vgg.clear_gradients()
+
+            all_train_iter = all_train_iter + train_parameters['train_batch_size']
+            all_train_iters.append(all_train_iter)
+            all_train_costs.append(loss.numpy()[0])
+            all_train_accs.append(acc.numpy()[0])
+
+            if batch_id % 1 == 0:
+                print(
+                    "Loss at epoch {} step {}: {}, acc: {}".format(epoch_num, batch_id, avg_loss.numpy(), acc.numpy()))
+
+        draw_train_process("training", all_train_iters, all_train_costs, all_train_accs, "trainning cost",
+                           "trainning acc")
+        draw_process("trainning loss", "red", all_train_iters, all_train_costs, "trainning loss")
+        draw_process("trainning acc", "green", all_train_iters, all_train_accs, "trainning acc")
+
+        # 保存模型参数
+        fluid.save_dygraph(vgg.state_dict(), "vgg")
+        print("Final loss: {}".format(avg_loss.numpy()))