Model_2 / README.md
zhaospei's picture
Upload 3 files
493aea3 verified
# 🏠 Mô hình Wide & Deep Neural Network - Dự đoán Giá Nhà California
## 📝 Mô tả
Đây là một mô hình **Wide & Deep Neural Network** được huấn luyện trên tập dữ liệu **California Housing** để dự đoán giá nhà trung bình (`MedHouseVal`). Mô hình được xây dựng bằng **PyTorch**, dựa trên kiến trúc trong cuốn *Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow* của **Aurélien Géron**.
## 📌 Nhiệm vụ
Dự đoán giá nhà dựa trên dữ liệu bảng (tabular regression) với 8 đặc trưng đầu vào.
## 📥 Đầu vào
- **Số chiều**: `[batch_size, 8]`
- **Kiểu dữ liệu**: `torch.FloatTensor`
- **Các đặc trưng đầu vào**:
- `'MedInc'` – Thu nhập trung vị
- `'HouseAge'` – Tuổi trung bình của căn nhà
- `'AveRooms'` – Số phòng trung bình
- `'AveBedrms'` – Số phòng ngủ trung bình
- `'Population'` – Dân số
- `'AveOccup'` – Số người trung bình trên mỗi hộ
- `'Latitude'` – Vĩ độ
- `'Longitude'` – Kinh độ
## 📤 Đầu ra
- **Kiểu**: `torch.FloatTensor` có shape `[batch_size, 1]`
- **Ý nghĩa**: Giá nhà trung bình dự đoán (giá trị thực).
## 🧪 Cách sử dụng mô hình
Dưới đây là ví dụ về cách sử dụng mô hình với dữ liệu đầu vào giả lập:
```python
import torch
import torch.nn as nn
from huggingface_hub import PyTorchModelHubMixin
# Tạo dữ liệu đầu vào giả lập (batch 1, 8 features)
x_input = torch.randn(1, 8)
print("Mock input:")
print(x_input)
# Định nghĩa mô hình Wide & Deep Neural Network
class WideAndDeepNet(nn.Module, PyTorchModelHubMixin):
def __init__(self):
super().__init__()
self.hidden1 = nn.Linear(6, 30)
self.hidden2 = nn.Linear(30, 30)
self.main_head = nn.Linear(35, 1)
self.aux_head = nn.Linear(30, 1)
self.main_loss_fn = nn.MSELoss(reduction='sum')
self.aux_loss_fn = nn.MSELoss(reduction='sum')
def forward(self, input_wide, input_deep, label=None):
act = torch.relu(self.hidden1(input_deep))
act = torch.relu(self.hidden2(act))
concat = torch.cat([input_wide, act], dim=1)
main_output = self.main_head(concat)
aux_output = self.aux_head(act)
if label is not None:
main_loss = self.main_loss_fn(main_output.squeeze(), label)
aux_loss = self.aux_loss_fn(aux_output.squeeze(), label)
return WideAndDeepNetOutput(main_output=main_output, aux_output=aux_output)
# Tải mô hình từ Hugging Face Hub
model = WideAndDeepNet.from_pretrained("sadhaklal/wide-and-deep-net-california-housing-v3")
model.eval()
# Dự đoán với mô hình
with torch.no_grad():
prediction = model(x_input)
print(f"Giá nhà dự đoán (mock input): {prediction.item():.3f}")
```