Sign In

Analizador de ".safetensors" - Google Colab

Analizador de ".safetensors" - Google Colab

El Programa permite mirar los tags de cualquier archivo safestensor, ordenarlos por mayor frecuencia y mostrar el consiguiente tag de activacion.

import pandas as pd
import re

def procesar_archivo(archivo, codificacion, cantidad_tags):
    with open(archivo, 'r', encoding=codificacion) as file:
        contenido_tags = file.read()

    # Buscar el contenido entre las comillas del tag "ss_tag_frequency"
    match = re.search(r'"ss_tag_frequency":"({.+?})"', contenido_tags)
    if match is None:
        print("No se encontró el tag 'ss_tag_frequency' en el archivo.")
        return

    contenido_tags = match.group(1)

    # Extraer los pares tag-frecuencia utilizando expresiones regulares
    pares = re.findall(r'"([^"]+)": (\d+)', contenido_tags)

    # Crear una lista de diccionarios con los datos de los tags
    lista_datos = [{'Tag': tag, 'Frecuencia': int(frecuencia)} for tag, frecuencia in pares]

    # Crear un DataFrame a partir de la lista de diccionarios
    df = pd.DataFrame(lista_datos)

    # Ordenar los tags por frecuencia de mayor a menor
    df = df.sort_values(by='Frecuencia', ascending=False)

    # Mostrar los primeros "cantidad_tags" tags completos y sus frecuencias
    pd.set_option('display.max_rows', cantidad_tags)
    print(df.head(cantidad_tags))


nombre_archivo = '/content/drive/MyDrive/Dataset/aeromorphAlo-03.safetensors'   # Reemplaza ''/content/drive/MyDrive/Dataset/aeromorphAlo-03.safetensors'  por la ruta correcta de tu archivo
codificacion = 'latin-1'  # Reemplaza 'utf-8' por la codificación correcta de tu archivo
cantidad_tags = 50 + 1  # Define la cantidad de tags a mostrar remplazando el 50 por el valor deciado

procesar_archivo(nombre_archivo, codificacion, cantidad_tags)

Ejemplo:

El segunda programa da toda la metadata/ hiperparametros del safestensor y la entrega en un resumen ejecutivo

def generar_informe_desde_archivo(nombre_archivo, codificacion):
    with open(nombre_archivo, 'r', encoding=codificacion) as archivo:
        contenido = archivo.read()

     # Analizar el contenido para extraer los valores necesarios
    valor1 = obtener_valor(contenido, "ss_sd_model_name")
    valor2 = obtener_valor(contenido, "ss_clip_skip")
    valor3 = obtener_valor(contenido, "ss_num_train_images")
    valor4 = obtener_valor(contenido, "ss_tag_frequency")  # Reemplaza con la clave correcta según la estructura de los datos
    valor5 = obtener_valor(contenido, "ss_epoch")
    valor6 = obtener_valor(contenido, "ss_face_crop_aug_range")
    valor7 = obtener_valor(contenido, "ss_full_fp16")
    valor8 = obtener_valor(contenido, "ss_gradient_accumulation_steps")
    valor9 = obtener_valor(contenido, "ss_gradient_checkpointing")
    valor10 = obtener_valor(contenido, "ss_learning_rate")
    valor11 = obtener_valor(contenido, "ss_lowram")
    valor12 = obtener_valor(contenido, "ss_lr_scheduler")
    valor13 = obtener_valor(contenido, "ss_lr_warmup_steps")
    valor14 = obtener_valor(contenido, "ss_max_grad_norm")
    valor15 = obtener_valor(contenido, "ss_max_token_length")
    valor16 = obtener_valor(contenido, "ss_max_train_steps")
    valor17 = obtener_valor(contenido, "ss_min_snr_gamma")
    valor18 = obtener_valor(contenido, "ss_mixed_precision")
    valor19 = obtener_valor(contenido, "ss_network_alpha")
    valor20 = obtener_valor(contenido, "ss_network_dim")
    valor21 = obtener_valor(contenido, "ss_network_module")
    valor22 = obtener_valor(contenido, "ss_new_sd_model_hash")
    valor23 = obtener_valor(contenido, "ss_noise_offset")
    valor24 = obtener_valor(contenido, "ss_num_batches_per_epoch")
    valor25 = obtener_valor(contenido, "ss_cache_latents")
    valor26 = obtener_valor(contenido, "ss_caption_dropout_every_n_epochs")
    valor27 = obtener_valor(contenido, "ss_caption_dropout_rate")
    valor28 = obtener_valor(contenido, "ss_caption_tag_dropout_rate")
    valor29 = obtener_valor(contenido, "ss_dataset_dirs")  # Reemplaza con la clave correcta según la estructura de los datos
    valor30 = obtener_valor(contenido, "ss_num_epochs")
    valor31 = obtener_valor(contenido, "ss_num_reg_images")
    valor32 = obtener_valor(contenido, "ss_optimizer")
    valor33 = obtener_valor(contenido, "ss_output_name")
    valor34 = obtener_valor(contenido, "ss_prior_loss_weight")
    valor35 = obtener_valor(contenido, "ss_sd_model_hash")
    valor36 = obtener_valor(contenido, "ss_sd_scripts_commit_hash")
    valor37 = obtener_valor(contenido, "ss_seed")
    valor38 = obtener_valor(contenido, "ss_session_id")
    valor39 = obtener_valor(contenido, "ss_text_encoder_lr")
    valor40 = obtener_valor(contenido, "ss_unet_lr")
    valor41 = obtener_valor(contenido, "ss_v2")
    valor42 = obtener_valor(contenido, "sshs_legacy_hash")
    valor43 = obtener_valor(contenido, "sshs_model_hash")

     # Generar el informe usando los valores extraídos
    informe = f'''Resumen Ejecutivo del Informe:
    
Parámetros Importantes:
- Nombre del modelo: {valor1}
- Clip skip: {valor2}
- Número de imágenes de entrenamiento: {valor3}
- Frecuencia de etiquetas:
- Épocas: {valor5}
- Rango de aumento de recorte facial: {valor6}
- Full FP16: {valor7}
- Pasos de acumulación de gradiente: {valor8}
- Punto de control de gradiente: {valor9}
- Tasa de aprendizaje: {valor10}
- Low RAM: {valor11}
- Programador de tasa de aprendizaje: {valor12}
- Pasos de calentamiento de tasa de aprendizaje: {valor13}
- Norma máxima de gradiente: {valor14}
- Longitud máxima del token: {valor15}
- Pasos máximos de entrenamiento: {valor16}
- Gamma mínima de SNR: {valor17}
- Precisión mixta: {valor18}
- Alfa de la red: {valor19}
- Dimensión de la red: {valor20}
- Módulo de la red: {valor21}
- Nuevo hash del modelo SD: {valor22}
- Offset de ruido: {valor23}
- Número de lotes por época: {valor24}
- Cachear latentes: {valor25}
- Tasa de abandono de subtítulos cada n épocas: {valor26}
- Tasa de abandono de subtítulos: {valor27}
- Tasa de abandono de etiquetas de subtítulos: {valor28}
- Número de épocas: {valor30}
- Número de imágenes de regresión: {valor31}
- Optimizador: {valor32}
- Nombre de salida: {valor33}
- Peso de pérdida previa: {valor34}
- Hash del modelo SD: {valor35}
- Hash de confirmación de scripts SD: {valor36}
- Semilla: {valor37}
- ID de sesión: {valor38}
- Tasa de aprendizaje del codificador de texto: {valor39}
- Tasa de aprendizaje de UNet: {valor40}
- Versión 2: {valor41}
- Hash heredado de SSHS: {valor42}
- Hash del modelo de SSHS: {valor43}'''



    return informe

def obtener_valor(contenido, clave):
    inicio = contenido.find(clave) + len(clave) + 3  # Sumar 3 para saltar los caracteres ': ",'
    fin = contenido.find('"', inicio)
    valor = contenido[inicio:fin]
    return valor

#
# Uso del código para generar el informe desde un archivo específico
nombre_archivo = '/content/drive/MyDrive/Dataset/aeromorphAlo-03.safetensors'  # Reemplaza '/ruta/del/archivo.txt' por la ruta correcta de tu archivo
codificacion = 'latin-1'  # Reemplaza 'utf-8' por la codificación correcta de tu archivo
informe_generado = generar_informe_desde_archivo(nombre_archivo, codificacion)
print(informe_generado)

Ejemplo:

~~~~~~~~~

Analizar miles de archivos txt para obtener dataframes con data para hacer exploracion de la misma.

import os
import pandas as pd

def analizar_archivos_en_carpeta(carpeta, codificacion):
    # Obtener la lista de archivos en la carpeta
    archivos = os.listdir(carpeta)

    # Crear una lista para almacenar los datos
    data = []

    # Iterar sobre los archivos
    for archivo in archivos:
        # Leer el contenido del archivo
        nombre_archivo = os.path.join(carpeta, archivo)
        with open(nombre_archivo, 'r', encoding=codificacion) as file:
            contenido = file.read()

        # Generar los valores del resumen ejecutivo
        valores = obtener_valores(contenido)

        # Agregar los valores a la lista
        for nombre_valor, cantidad_valor in valores.items():
            valor_actual = {'Archivo': archivo, 'Nombre del Valor': nombre_valor, 'Cantidad de Valor': cantidad_valor}
            data.append(valor_actual)

    # Crear un DataFrame a partir de los datos
    df = pd.DataFrame(data)

    # Mostrar el DataFrame con los valores
    print(df)

def obtener_valores(contenido):
    # Analizar el contenido para extraer los valores necesarios [Esta def es la unica que realmente te interesa toquetiar]
    valores = {}
    valor1 = obtener_valor(contenido, "ss_max_train_steps")
    valor2 = obtener_valor(contenido, "ss_clip_skip")
    valor3 = obtener_valor(contenido, "ss_num_train_images")
    valor4 = obtener_valor(contenido, "ss_num_epochs")
    # Agregar más valores según sea necesario
    valores = {'ss_max_train_steps': valor1, 'ss_clip_skip': valor2, 'ss_num_train_images': valor3, 'ss_num_epochs': valor4} # Actualiza con los nombres de los valores correspondientes


    return valores

def obtener_valor(contenido, clave):
    inicio = contenido.find(clave) + len(clave) + 3  # Sumar 3 para saltar los caracteres ': ",'
    fin = contenido.find('"', inicio)
    valor = contenido[inicio:fin]
    return valor

# Especifica la carpeta que deseas analizar
carpeta = '/content/drive/MyDrive/Dataset/Pruebas'
codificacion = 'latin-1'  # Reemplaza 'utf-8' por la codificación correcta de tus archivos

# Llama a la función para analizar los archivos en la carpeta
analizar_archivos_en_carpeta(carpeta, codificacion)

Ejemplo:

Ejecutar en :

Abrir con Gato

Abrir con Colab

5

Comments