加载中…
加载中…
Este modelo es un ejemplo pedagógico del Seminario de Actualización (IFTS N.º 18). Muestra cómo se entrena una regresión lineal con el ciclo explícito de PyTorch y cómo se publican los pesos en formato safetensors.
Predice el precio de una casa, en miles de US$, a partir de su superficie y de si tiene balcón y ascensor. Resuelve el mismo problema que el ejemplo de scikit-learn.
Predecir una variable numérica continua: el precio estimado de una casa.
train.py. Es el mismo de la Clase 10, con la misma semilla, y no son casas reales.m2 (de 35 a 120), balcon (0 o 1), ascensor (0 o 1).precio, en miles de US$.config.json.torch.nn.Linear(3, 1), es decir, tres pesos y un bias. Está definida en modelo.py.MSELoss).SGD), con tasa de aprendizaje 0,1.Parámetros aprendidos. Son los que guarda model.safetensors:
| Parámetro | Valor |
|---|---|
lineal.weight |
[35,157 · 4,351 · 5,992] |
lineal.bias |
147,769 |
Por qué los pesos no se parecen a los de scikit-learn. Están en la escala de las entradas normalizadas. Si se divide cada peso por el desvío de su variable, se vuelve a la escala original. Por ejemplo, 35,157 / 23,398 ≈ 1,503 para m2, que es el mismo peso que encontró scikit-learn.
Se evaluó sobre 40 casas que el modelo no vio durante el entrenamiento.
| Métrica | Resultado |
|---|---|
| MAE | 3,08 miles de US$ |
| R² | 0,989 |
| Archivo | Qué es |
|---|---|
model.safetensors |
solo los pesos (state_dict) |
config.json |
las entradas, la salida y la normalización que hay que aplicar antes de predecir |
modelo.py |
la clase del modelo: PyTorch no la guarda en el archivo de pesos |
train.py |
el código que lo entrenó |
predict.py |
cómo cargarlo y usarlo |
requirements.txt |
las dependencias |
README.md |
esta Model Card |
import json
import numpy as np
import torch
from safetensors.torch import load_file
from modelo import RegresionLineal
config = json.load(open("config.json"))
media = np.array(config["normalizacion"]["media"], dtype="float32")
desvio = np.array(config["normalizacion"]["desvio"], dtype="float32")
modelo = RegresionLineal(n_entradas=3) # 1. el modelo vacío
modelo.load_state_dict(load_file("model.safetensors")) # 2. se le cargan los pesos
modelo.eval()
casa = np.array([[80, 1, 0]], dtype="float32")
with torch.no_grad():
print(modelo(torch.tensor((casa - media) / desvio))) # tensor([[148.5]])
config.json.modelo.py). Si cambia la clase, load_state_dict falla.Modelo desarrollado con fines educativos para el IFTS N.º 18. Docente: Cynthia M. Villagra.