Solucionar problemas instalando nilmtk-contrib


Nilmtk-contrib es un repositorio de contribuciones de la comunidad para NILMTK que permite agregar nuevas funcionalidades, modelos de aprendizaje automático y algoritmos de desagregación de energía. Dado que el desarrollo del NILMTK principal ha sido más lento en los últimos años, nilmtk-contrib permite a los investigadores y desarrolladores mejorar la herramienta sin depender de actualizaciones en el repositorio principal.

Características de nilmtk-contrib

  1. Nuevos Algoritmos de Desagregación
    • Contiene implementaciones de modelos avanzados basados en redes neuronales, como Sequence-to-Sequence y Variational Autoencoders.
    • Se han añadido métodos híbridos que combinan enfoques basados en descomposición de señales y aprendizaje profundo.
  2. Soporte para Nuevos Datasets
    • Extiende la compatibilidad con bases de datos de consumo eléctrico no incluidas en NILMTK.
    • Simplifica la conversión de datos desde formatos comunes como CSV a HDF5, que es el formato utilizado por NILMTK.
  3. Mayor Flexibilidad y Mantenibilidad
    • Permite a los desarrolladores probar nuevas ideas sin modificar el código base del NILMTK original.
    • Se puede instalar y utilizar junto con NILMTK sin conflictos.

Para instalar nilmtk-contrib correctamente, debes cumplir con los requisitos de versiones específicas de Python y dependencias.

Requisitos clave

PaqueteVersión requeridaCompatibilidad con Python
NILMTK>=0.4Python 3.7 (recomendado)
scikit-learn>=0.21Python 3.5-3.7
Keras>=2.2.4Python 3.5+
cvxpy>=1.0.0Python >=3.7 (para cvxpy<=1.0.0)

Guia paso a paso para instalar nilmtk-contrib sin conflictos

Los pasos ajustados para crear un entorno limpio, instalando las versiones de las librerías necesarias y evitando los errores tipicos:

1. Crear y preparar el entorno virtual

Primero, elimina cualquier entorno anterior si es necesario y luego crea uno nuevo:

# Verificar los entornos existentes
conda env list

# Eliminar el entorno 'nilm' si ya existe
conda env remove --name nilm

# Limpiar cache
conda clean --all

Python 3.7 es la versión más estable que es usada para estas dependencias y la que los creadores de NILMTK recomiendas, luego, lo ideal es crear el entorno limpio con esa versión:

# Crear el entorno 'nilm' con Python 3.7
conda create -n nilm python=3.7 -y

# Activar el entorno recién creado
conda activate nilm

2. Instalar numpy compatible

Instalar una versión específica de numpy para asegurar la compatibilidad con NILMTK:

pip install numpy==1.19.5

3. Agregar canales de Conda

Para asegurar que las dependencias necesarias se encuentren:

conda config --add channels conda-forge
conda config --add channels nilmtk

4. Instalar nilmtk

Instala la versión compatible de NILMTK:

conda install -c nilmtk nilmtk=0.4.3 -y

5. Instalar matplotlib compatible

La versión de matplotlib requerida por NILMTK 0.4.3 es algo restrictiva. Debes instalar matplotlib-base primero:

# Instalar matplotlib-base y matplotlib compatibles
conda install matplotlib-base=3.1.3 matplotlib=3.1.3 -y

6. Instalar TensorFlow compatible

Instalar una versión de TensorFlow compatible con las bibliotecas:

pip install tensorflow==1.14.0

7. Instalar nilm_metadata

Instalar el paquete nilm_metadata desde GitHub:

pip install git+https://github.com/nilmtk/nilm_metadata

8. Instalar nilmtk-contrib

La instalación de nilmtk-contrib podría fallar debido a la falta de detección de la instalación de NILMTK por parte de pip. La solución es instalar nilmtk-contrib sin depender de las bibliotecas que necesita verificar:

pip install --no-deps git+https://github.com/nilmtk/nilmtk-contrib

Alternativa (si el paso anterior no funciona ): Si el paso anterior no funciona, puedes clonar el repositorio y hacer la instalación manualmente:

git clone https://github.com/nilmtk/nilmtk-contrib.git
cd nilmtk-contrib
pip install --no-deps .

9. Instalar otras dependencias necesarias

Es posible que necesites instalar otras dependencias, como cvxpy y protobuf:

pip install protobuf==3.20.*
pip install cvxpy==1.1.13

10. Crear archivo parche.py (muy importante)

Si ejecutamos algo que incluya el modulos niml_contrib con la instalacion actual, lo normal es tener con BinaryCrossentropy y MeanSquaredError. Si se presenta el error ImportError: cannot import name 'BinaryCrossentropy' from 'keras.losses', podriamos editar el archivo correspondiente (rnn_attention_classification.py) para reemplazar las importaciones incorrectas de Keras. Es decir en lugar de:

from keras.losses import BinaryCrossentropy, MeanSquaredError

Usar las funciones personalizadas para estas pérdidas:

from keras import backend as K

def BinaryCrossentropy():
def loss(y_true, y_pred):
return K.binary_crossentropy(y_true, y_pred)
return loss

def MeanSquaredError():
def loss(y_true, y_pred):
return K.mean(K.square(y_pred - y_true), axis=-1)
return loss

El problema es que si tocamos ficheros de la librería nos va a fallar el kernel, así que lo mejor es hacerlo lo mismo desde un parche (lo cual en el argot se llama monkey patche), que deberemos guardar en nuestro directorio de trabajo.

El contenido final del parche, por ejemplo que nombraremos como «parche.py» , es el siguiente:

import keras.losses
import keras.layers

# Parches para evitar errores de importación con versiones antiguas de Keras
if not hasattr(keras.losses, 'BinaryCrossentropy'):
    def BinaryCrossentropy(*args, **kwargs): pass
    keras.losses.BinaryCrossentropy = BinaryCrossentropy

if not hasattr(keras.losses, 'MeanSquaredError'):
    def MeanSquaredError(*args, **kwargs): pass
    keras.losses.MeanSquaredError = MeanSquaredError

if not hasattr(keras.layers, 'MultiHeadAttention'):
    class MultiHeadAttention:
        def __init__(self, *args, **kwargs): pass
        def __call__(self, *args, **kwargs): return self
    keras.layers.MultiHeadAttention = MultiHeadAttention

if not hasattr(keras.layers, 'LayerNormalization'):
    class LayerNormalization:
        def __init__(self, *args, **kwargs): pass
        def __call__(self, *args, **kwargs): return self
    keras.layers.LayerNormalization = LayerNormalization

Para usar el parche en nuestro código sin tener que tocar variables de entorno con el directorio de trabajo podemos usar este ejemplo adaptándolo a nuestra casuística particular:

import tensorflow as tf
print("TF version:", tf.__version__)

import sys
sys.path.append("D:/ruta/a/tu/directorio/del/parche")  # Asegúrate de que el parche.py esté allí

import parche  # Esto aplica los monkey patches

import nilmtk_contrib
print("nilmtk-contrib instalado correctamente")
  • El parche.py se encarga de que nilmtk_contrib no falle por capas o funciones modernas que no existen en Keras 2.2.4.
  • Si necesitas realmente usar MultiHeadAttention o BERT, requerirás migrar a TensorFlow 2.x (no recomendado si usas NILMTK 0.4.3).

11. Registrar el entorno en Jupyter (Muy recomndable)

Si deseas usar este entorno en Jupyter Notebook, regístralo como un nuevo kernel:

python -m ipykernel install --user --name nilm --display-name "Python (nilm)"

Para probar que todo ha ido bien, ejecuta este comando para confirmar que todo está instalado correctamente:

python -c «import nilmtk; import nilmtk_contrib; print(‘Éxito’)»

12. Salir del entorno

Cuando termines de trabajar en el entorno, puedes desactivarlo:

conda deactivate

13. Verificar el entorno

Finalmente, asegúrate de que el entorno esté configurado correctamente:

conda env list

Con estos pasos, tu entorno limpio debería estar correctamente configurado para trabajar con NILMTK, nilmtk-contrib, y otras bibliotecas necesarias. Si tienes algún problema en el proceso, seria recomendable empezar nuevamente desde el principio porque esta guia ha sido contrasatada y deberia de funcionar.

Módulos que puede que se necesite instalar si hay errores ( lo anexo simplemente por curiosidad pero no seran necesarios con los pasos anteriores):

1. Instalar Keras y TensorFlow compatibles

Para evitar conflictos con keras.optimizers, usa:

pip install tensorflow==2.5.0 keras==2.4.3 h5py==3.1.0

2. Instalar cvxpy 1.0.0 (versión compatible)

cvxpy 1.0.0 funcionaba con Python 3.7 pero ahora no es posible:

pip install cvxpy==1.0.0

El error ocurre porque CVXPY 1.0.0 no existe en PyPI, y las versiones disponibles requieren Python ≥3.8. Para resolverlo en tu entorno nilmtk-env (Python 3.7), sigue estos pasos:

3. Instalar CVXPY 1.3.4 (última versión compatible con Python 3.7):

pip install cvxpy==1.3.4 numpy==1.19.5 scipy==1.6.3

Verificar instalación:

python -c "import cvxpy; print(cvxpy.__version__)"
# Debe mostrar: 1.3.4

Resolución de otros conflictos comunes

ErrorSolución
ImportError: cannot import name 'SGD'Asegúrate de usar tensorflow.keras.optimizers en lugar de keras.optimizers.
ModuleNotFoundError: No module named 'tensorflow'Revisa que tensorflow==2.5.0 esté instalado.
numpy.ufunc size changedFija numpy==1.19.5 y evita actualizaciones automáticas.

Notas adicionales

  • GPU: Si tienes una tarjeta NVIDIA, instala CUDA 11.2 y cuDNN 8.1.0 para acelerar el entrenamiento.
  • Entornos alternativos: Si persisten errores, clona los repositorios manualmente y configura el PYTHONPATH:bashgit clone https://github.com/nilmtk/nilm_metadata.git git clone https://github.com/nilmtk/nilmtk.git git clone https://github.com/nilmtk/nilmtk-contrib.git set PYTHONPATH=%PYTHONPATH%;C:\ruta\a\nilm_metadata;C:\ruta\a\nilmtk;C:\ruta\a\nilmtk-contrib

Con estos pasos, nilmtk-contrib debería funcionar sin conflictos en Windows.

Ejemplo de Uso

Después de instalarlo, puedes importar y utilizar algoritmos de desagregación avanzados como:

from nilmtk_contrib.disaggregate import Seq2Point

model = Seq2Point()
# Cargar datos y entrenar el modelo...

Conclusión

nilmtk-contrib es una excelente opción si trabajas en NILM y necesitas herramientas más actualizadas y flexibles que las que ofrece NILMTK por defecto. Es especialmente útil para investigadores que desean experimentar con nuevos modelos de desagregación energética.

2024 03 31 12 37 03 INSTALAR NILMTK EN UBUNTU Busqueda de Google y 6 paginas mas Personal  Micro