Files changed (3) hide show
  1. Dockerfile +14 -11
  2. app.py +35 -36
  3. requirements.txt +4 -7
Dockerfile CHANGED
@@ -1,16 +1,19 @@
1
- # Usa una imagen base de Python
2
- FROM python:3.9
3
- # Establece el directorio de trabajo
4
- WORKDIR /code
5
 
6
- # Copia los archivos necesarios al contenedor
7
- COPY ./requirements.txt /code/requirements.txt
8
- RUN pip install --no-cache-dir -r /code/requirements.txt
9
- RUN pip install fastapi uvicorn
10
 
11
- COPY . .
 
 
 
12
 
13
- RUN chmod -R 777 /code
 
 
 
 
14
 
15
  # Comando para ejecutar la aplicación
16
- CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]
 
1
+ # Imagen base de Python
2
+ FROM python:3.9-slim
 
 
3
 
4
+ # Establecer el directorio de trabajo
5
+ WORKDIR /app
 
 
6
 
7
+ # Copiar los archivos necesarios a la imagen
8
+ COPY app.py /app
9
+ COPY model.h5 /app
10
+ COPY requirements.txt /app
11
 
12
+ # Instalar dependencias
13
+ RUN pip install --no-cache-dir -r requirements.txt
14
+
15
+ # Exponer el puerto 8000
16
+ EXPOSE 8000
17
 
18
  # Comando para ejecutar la aplicación
19
+ CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"]
app.py CHANGED
@@ -1,45 +1,44 @@
1
- import pandas as pd
2
- import tensorflow as tf
3
- from keras.models import Sequential, model_from_json
4
- from keras.layers import InputLayer, Dense
5
  from fastapi import FastAPI, HTTPException
6
  from pydantic import BaseModel
 
7
  import numpy as np
8
- from typing import List
9
-
10
- class InputData(BaseModel):
11
- data: List[float]
12
 
 
13
  app = FastAPI()
14
 
15
- # Cargar y procesar datos desde titanic-train.csv
16
- def load_data():
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  try:
18
- df = pd.read_csv("titanic-train.csv")
19
-
20
- return df
21
- except Exception as e:
22
- raise HTTPException(status_code=500, detail=f"Error cargando los datos: {str(e)}")
23
-
24
-
25
- def load_model():
26
- with open("model.json", "r") as json_file:
27
- model_config = json_file.read()
28
- model = tf.keras.models.model_from_json(model_config)
29
- model.load_weights("model.h5")
30
- model.compile(loss="mean_squared_error", optimizer="adam", metrics=["binary_accuracy"])
31
- return model
32
-
33
- model = load_model()
34
- data = load_data() # Cargar y almacenar los datos al iniciar la aplicación
35
-
36
- # Ruta de predicción
37
- @app.post("/predict/")
38
- async def predict(data: InputData):
39
- try:
40
- input_data = np.array(data.data).reshape(1, -1)
41
- prediction = model.predict(input_data).round()
42
- return {"prediction": prediction.tolist()}
43
  except Exception as e:
44
  raise HTTPException(status_code=500, detail=str(e))
45
-
 
 
 
 
 
1
  from fastapi import FastAPI, HTTPException
2
  from pydantic import BaseModel
3
+ import tensorflow as tf
4
  import numpy as np
 
 
 
 
5
 
6
+ # Inicializar la aplicación FastAPI
7
  app = FastAPI()
8
 
9
+ # Cargar el modelo
10
+ model = tf.keras.models.load_model("model.h5")
11
+
12
+ # Clase para los datos de entrada
13
+ class PredictionInput(BaseModel):
14
+ pclass: int
15
+ gender: str # "male" o "female"
16
+ age: float
17
+ sibsp: int
18
+ parch: int
19
+ fare: float
20
+
21
+ # Función de preprocesamiento
22
+ def preprocess_input(data: PredictionInput):
23
+ # Convertir género a un valor numérico
24
+ gender = 1 if data.gender.lower() == "female" else 0
25
+
26
+ # Crear array con los datos procesados
27
+ input_data = np.array([[data.pclass, gender, data.age, data.sibsp, data.parch, data.fare]])
28
+
29
+ return input_data
30
+
31
+ # Endpoint de predicción
32
+ @app.post("/predict")
33
+ async def predict(data: PredictionInput):
34
  try:
35
+ # Preprocesar los datos de entrada
36
+ input_data = preprocess_input(data)
37
+
38
+ # Realizar la predicción
39
+ prediction = model.predict(input_data)
40
+
41
+ # Devolver el resultado en un diccionario
42
+ return {"survived_probability": float(prediction[0][0])}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  except Exception as e:
44
  raise HTTPException(status_code=500, detail=str(e))
 
requirements.txt CHANGED
@@ -1,7 +1,4 @@
1
- keras==2.4.3
2
- tensorflow==2.4.1
3
- fastapi
4
- numpy
5
- pydantic
6
- uvicorn
7
- pandas
 
1
+ fastapi==0.88.0
2
+ uvicorn==0.20.0
3
+ tensorflow==2.15.0
4
+ numpy==1.24.3