amandaodoo commited on
Commit
990a10e
路
verified 路
1 Parent(s): 08797a4

Publicar modelo y Model Card

Browse files
Files changed (7) hide show
  1. README.md +8 -0
  2. cargar.py +1 -2
  3. config.json +21 -0
  4. exportar.py +6 -0
  5. model_ts.pt +1 -1
  6. predict_hub.py +34 -0
  7. requirements.txt +1 -0
README.md CHANGED
@@ -24,6 +24,14 @@ python exportar.py
24
  python cargar.py
25
  ```
26
 
 
 
 
 
 
 
 
 
27
  ## Qu茅 guarda el formato
28
 
29
  | | |
 
24
  python cargar.py
25
  ```
26
 
27
+ ## Usar el modelo desde el Hub
28
+
29
+ Esta carpeta se puede subir tal cual como repositorio de modelo (desde la ra铆z: `python publicar_en_hub.py 00-formatos-exportacion/pytorch-exportar-torchscript`). Despu茅s, desde cualquier PC:
30
+
31
+ ```bash
32
+ python predict_hub.py tu-usuario/casas-pytorch-exportar-torchscript
33
+ ```
34
+
35
  ## Qu茅 guarda el formato
36
 
37
  | | |
cargar.py CHANGED
@@ -11,11 +11,10 @@ import numpy as np
11
  import torch
12
 
13
  CARPETA = Path(__file__).parent
14
- ORIGEN = CARPETA.parent / "pytorch-entrenamiento-evaluacion"
15
  ENTRADAS = ["m2", "balcon", "ascensor"]
16
 
17
  # La normalizaci贸n no viaja dentro del archivo: se lee de config.json
18
- config = json.loads((ORIGEN / "config.json").read_text(encoding="utf-8"))
19
  media = np.array(config["normalizacion"]["media"], dtype="float32")
20
  desvio = np.array(config["normalizacion"]["desvio"], dtype="float32")
21
 
 
11
  import torch
12
 
13
  CARPETA = Path(__file__).parent
 
14
  ENTRADAS = ["m2", "balcon", "ascensor"]
15
 
16
  # La normalizaci贸n no viaja dentro del archivo: se lee de config.json
17
+ config = json.loads((CARPETA / "config.json").read_text(encoding="utf-8"))
18
  media = np.array(config["normalizacion"]["media"], dtype="float32")
19
  desvio = np.array(config["normalizacion"]["desvio"], dtype="float32")
20
 
config.json ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "arquitectura": "RegresionLineal (torch.nn.Linear)",
3
+ "entradas": [
4
+ "m2",
5
+ "balcon",
6
+ "ascensor"
7
+ ],
8
+ "salida": "precio (miles de US$)",
9
+ "normalizacion": {
10
+ "media": [
11
+ 78.51875305175781,
12
+ 0.46875,
13
+ 0.512499988079071
14
+ ],
15
+ "desvio": [
16
+ 23.397640228271484,
17
+ 0.4990224838256836,
18
+ 0.4998437762260437
19
+ ]
20
+ }
21
+ }
exportar.py CHANGED
@@ -8,6 +8,7 @@ Uso:
8
  """
9
 
10
  import json
 
11
  import sys
12
  from pathlib import Path
13
 
@@ -34,3 +35,8 @@ modelo.eval()
34
  ejemplo = torch.zeros(1, 3)
35
  torch.jit.trace(modelo, ejemplo).save(CARPETA / "model_ts.pt")
36
  print("Modelo guardado en model_ts.pt")
 
 
 
 
 
 
8
  """
9
 
10
  import json
11
+ import shutil
12
  import sys
13
  from pathlib import Path
14
 
 
35
  ejemplo = torch.zeros(1, 3)
36
  torch.jit.trace(modelo, ejemplo).save(CARPETA / "model_ts.pt")
37
  print("Modelo guardado en model_ts.pt")
38
+
39
+ # Se copian al lado del modelo: as铆 la carpeta se puede subir sola al Hub
40
+ for archivo in ["config.json"]:
41
+ shutil.copy(ORIGEN / archivo, CARPETA / archivo)
42
+ print("Copiados: config.json")
model_ts.pt CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:d0ecc8e75969f8dcc1aab653945d52155838cce4e2e81af062ef986e746bbbec
3
  size 4258
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9cb1f50c9dd8a99c97f2ee06caab15acd700a088e2649ff5b547964442e165c9
3
  size 4258
predict_hub.py ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Descarga el modelo desde Hugging Face Hub y predice EN ESTA PC.
2
+
3
+ Baja model_ts.pt + config.json. El modelo vive en el Hub; la inferencia la hace este c贸digo.
4
+
5
+ No hace falta la clase RegresionLineal: el c贸digo viene en el archivo.
6
+
7
+ Uso:
8
+ python predict_hub.py tu-usuario/casas-pytorch-exportar-torchscript
9
+ """
10
+
11
+ import json
12
+ import sys
13
+
14
+ import numpy as np
15
+ import torch
16
+ from huggingface_hub import hf_hub_download
17
+
18
+ REPO_ID = sys.argv[1] if len(sys.argv) > 1 else "TU-USUARIO/casas-pytorch-exportar-torchscript"
19
+
20
+ # La primera vez descarga el archivo; despu茅s usa la copia en cach茅
21
+ casas_nuevas = np.array([[50, 0, 0], [80, 1, 0], [110, 1, 1]], dtype="float32")
22
+ with open(hf_hub_download(repo_id=REPO_ID, filename="config.json"), encoding="utf-8") as f:
23
+ config = json.load(f)
24
+ media = np.array(config["normalizacion"]["media"], dtype="float32")
25
+ desvio = np.array(config["normalizacion"]["desvio"], dtype="float32")
26
+ x = torch.tensor((casas_nuevas - media) / desvio)
27
+
28
+ modelo = torch.jit.load(hf_hub_download(repo_id=REPO_ID, filename="model_ts.pt"))
29
+ with torch.no_grad():
30
+ precios = modelo(x).numpy()
31
+
32
+ ENTRADAS = ["m2", "balcon", "ascensor"]
33
+ for casa, precio in zip([[50, 0, 0], [80, 1, 0], [110, 1, 1]], np.ravel(precios)):
34
+ print(f"{dict(zip(ENTRADAS, casa))} -> {precio:.1f} miles de US$")
requirements.txt CHANGED
@@ -1,3 +1,4 @@
1
  torch>=2.1
2
  safetensors
3
  numpy
 
 
1
  torch>=2.1
2
  safetensors
3
  numpy
4
+ huggingface_hub # para predict_hub.py