aledraa commited on
Commit
e05c8fc
·
verified ·
1 Parent(s): a3fce35

dataset training code model

Browse files
Files changed (4) hide show
  1. .gitattributes +1 -0
  2. data.json +3 -0
  3. model.pth +3 -0
  4. train.py +58 -0
.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ data.json filter=lfs diff=lfs merge=lfs -text
data.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1b85606f9c7ada0074db507f62b451765566a24d50c8710e9f324bfff94923b1
3
+ size 19234021
model.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d2ef9ae383a6463e2d69d5f434756f64550ce1f413aafb13f97e3321a69cbb49
3
+ size 13501
train.py ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ import torch
3
+ import torch.nn as nn
4
+ import numpy as np
5
+ from sklearn.preprocessing import StandardScaler
6
+ from sklearn.model_selection import train_test_split
7
+ from sklearn.metrics import r2_score
8
+
9
+ with open('./data.json', 'r') as f:
10
+ data = json.load(f)
11
+
12
+ X = np.array([[v['area'], v['dis'], v['type'], v['middle_point'][0], v['middle_point'][1]] for v in data.values()])
13
+ y = np.array([v['price'] for v in data.values()])
14
+
15
+ scaler = StandardScaler()
16
+ X = scaler.fit_transform(X)
17
+
18
+ X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
19
+
20
+ class Net(nn.Module):
21
+ def __init__(self):
22
+ super().__init__()
23
+ self.net = nn.Sequential(nn.Linear(5, 64), nn.ReLU(), nn.Linear(64, 32), nn.ReLU(), nn.Linear(32, 1))
24
+ def forward(self, x):
25
+ return self.net(x)
26
+
27
+ model = Net()
28
+ X_train_tensor = torch.FloatTensor(X_train)
29
+ y_train_tensor = torch.FloatTensor(y_train)
30
+ X_test_tensor = torch.FloatTensor(X_test)
31
+ y_test_tensor = torch.FloatTensor(y_test)
32
+ optimizer = torch.optim.Adam(model.parameters(), lr=0.5)
33
+
34
+ for epoch in range(2000):
35
+ pred = model(X_train_tensor).squeeze()
36
+ loss = nn.MSELoss()(pred, y_train_tensor)
37
+ optimizer.zero_grad()
38
+ loss.backward()
39
+ optimizer.step()
40
+
41
+ if epoch % 100 == 0:
42
+ with torch.no_grad():
43
+ train_pred = model(X_train_tensor).squeeze().numpy()
44
+ test_pred = model(X_test_tensor).squeeze().numpy()
45
+ train_r2 = r2_score(y_train, train_pred)
46
+ test_r2 = r2_score(y_test, test_pred)
47
+ print(f"Epoch {epoch}: Train R²: {train_r2:.4f}, Test R²: {test_r2:.4f}")
48
+
49
+ with torch.no_grad():
50
+ train_pred = model(X_train_tensor).squeeze().numpy()
51
+ test_pred = model(X_test_tensor).squeeze().numpy()
52
+
53
+ train_r2 = r2_score(y_train, train_pred)
54
+ test_r2 = r2_score(y_test, test_pred)
55
+ print(f"Final - Train R²: {train_r2:.4f}, Test R²: {test_r2:.4f}")
56
+
57
+ torch.save({'model': model.state_dict(), 'scaler': scaler}, 'model.pth')
58
+ print("Model saved!")