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 :