Mostrar los tags: r

Mostrando del 41 al 50 de 3.145 coincidencias
Se ha buscado por el tag: r
Imágen de perfil

Generador de valores hash para contraseñas.


Python

Actualizado el 5 de Mayo del 2024 por Antonio (77 códigos) (Publicado el 20 de Noviembre del 2022)
2.315 visualizaciones desde el 20 de Noviembre del 2022
El siguiente programa genera valores hash para una contraseña, utilizando distintos algoritmos. También permite la copia de las salidas generadas.
ph
Imágen de perfil

Aplicación de la función ReLU a cada píxel.


Python

Publicado el 29 de Abril del 2024 por Hilario (145 códigos)
307 visualizaciones desde el 29 de Abril del 2024
Figure_1
original
******************************************************
********************************************************

Aula_28_Aplicar_Relu.py
*****************************
Este ejercicio que proponemos es sumamente sencillo. No por ello es importante dentro del desarrollo de redes neuronales.
Lo hacemos con el fin de aplicar una funcion Relu auna imagen, en un proceso usual dentro de las redes neuronales.

Indiquemos brevemente lo que es una funcion RELU.
---------------------------------------------------------------------
La función ReLU (Rectified Linear Unit) es una función de activación comúnmente utilizada en redes neuronales
y otras técnicas de aprendizaje automático. Se define matemáticamente de la siguiente manera:

f(x)={ 0,x
si x≤0
si x>0
​O en otras palabras, de forma más sencilla,
la función ReLU devuelve 0 para todos los valores de entrada que son negativos o iguales a cero,
y devuelve el mismo valor de entrada para valores positivos.

En el contexto de redes neuronales, la función ReLU se utiliza típicamente como función de activación
en las capas ocultas debido a su simplicidad y eficiencia computacional. Permite la introducción
de no linealidades en el modelo, lo que ayuda a que la red neuronal pueda aprender
representaciones más complejas de los datos de entrada.
*************************************************************************************************
En este ejercicio pretendemos aplicar esta función a una imagen dimensionada previamente.

Pasamos a explicar el mismo con poco de detalle.
1-Importa las bibliotecas necesarias:
numpy para el procesamiento numérico y matplotlib.pyplot para visualizar la imagen.

import numpy as np
import matplotlib.pyplot as plt

-------------------------------------------------------------------------
2-Definimos una función llamada apply_relu que toma
una imagen como entrada y aplica la función ReLU a cada píxel de la imagen.

def apply_relu(imagen):
alto, ancho, canales = imagen.shape
imagen_relu = np.zeros_like(imagen)
for i in range(alto):
for j in range(ancho):
for k in range(canales):
imagen_relu[i, j, k] = max(0, imagen[i, j, k])
return imagen_relu

-----------------------------------------------------------------------------------------
3- Carga la imagen desde un archivo. En este caso, la ruta del archivo es
/home/margarito/python/imagen.jpg.
En vuestro caso deberéis modificar esta ruta con la situación del archivo imagen.
imagen = plt.imread('/home/margarito/python/imagen.jpg')
-----------------------------------------------------------------------------------------

4-Obtiene las dimensiones de la imagen (alto y ancho) utilizando la función shape.

alto, ancho, _ = imagen.shape
----------------------------------------------------------------------------------
5-Muestra la imagen original utilizando plt.imshow.

plt.imshow(imagen)
plt.title('Imagen Original')
plt.axis('off')
plt.show()

-----------------------------------------------------------------------------------
6-Aplica la función ReLU a la imagen cargada utilizando la función apply_relu definida anteriormente

imagen_relu = apply_relu(imagen)
---------------------------------------------------------------------------------------
7-Muestra la imagen después de aplicar la función ReLU utilizando plt.imshow.
plt.imshow(imagen_relu)
plt.title('Imagen aplicando la función ReLU')
plt.axis('off')
plt.show()

*************************************************************************************

Como se puede comprobar apenas existe una modificación visible, entre las dos
imagenes, antes y después de aplicar la función Relu.
Esto puede ser debido a que los valores negativos son escasos en el array 2D de la imagen.
********************************************************************************************************
---------------------------------------------------------------------------------------------------
Este ejercicio fue ejecutado en una plataforma Linux, Ubuntu 20.04.6 LTS.
Editado con Sublime Text.

Para que su funcionamiento y ejecucion sea correcto
se deberá de tener instalado en vuestro sistema
la versión numpy-1.24.4.
Es conveniente hacer este comando en consola, para actualizarlo:

pip install --upgrade numpy
************************************************************************
Ejecución del ejercicio en linea bajo consola:
python3 Aula_28_Aplicar_Relu.py
-----------------------------------------------------------------------
Imágen de perfil

Juego de la Serpiente (en ASCII)


Python

estrellaestrellaestrellaestrellaestrella(1)
Actualizado el 12 de Abril del 2024 por Antonio (77 códigos) (Publicado el 30 de Marzo del 2020)
7.513 visualizaciones desde el 30 de Marzo del 2020
Versión, con caracteres ASCII del popular "Juego de la Serpiente" que incorpora una pantalla de opciones. El control de la serpiente se efectúa mediante las teclas de dirección del teclado. También puede pausarse la partida, presionando la barra espaciadora y una función para salir de partida, mediante la tecla "q".
sg4
sg7
sng
Imágen de perfil

Visor de gráficos financieros.


Python

estrellaestrellaestrellaestrellaestrella(2)
Actualizado el 1 de Abril del 2024 por Antonio (77 códigos) (Publicado el 7 de Julio del 2021)
10.524 visualizaciones desde el 7 de Julio del 2021
El programa muestra información relativa al precio máximo, mínimo, de apertura y cierre de un activo financiero (estos se irán almacenando en el archivo "symbols" que se generará al ejecutar el programa por primera vez) y para un periodo de tiempo. También muestra los gráficos relativos a las medias móviles exponenciales de 50 y 200 sesiones.
PARA CUALQUIER DUDA U OBSERVACIÓN USEN LA SECCIÓN DE COMENTARIOS.
gf
Imágen de perfil

Red neuronal CNN, detección de clases.


Python

Publicado el 24 de Marzo del 2024 por Hilario (145 códigos)
632 visualizaciones desde el 24 de Marzo del 2024
CLASES DE IMAGENES CON UNA MUESTRA DE CADA UNA.
-----------------------------------------------------------------------------------
Figure_1
Figure_2
Figure_3
Figure_4
Figure_5

***************************************************************
IMAGEN PROPUESTA A EVALUAR.
------------------------------------------------------------------------------

imagen

****************************************************************************************************************
TUTORIAL DEL EJERCICIO.
--------------------------------------
Este ejercicio que propongo hoy, está realizado con el fin de entender la dinámica, o forma de realizar una red neuronal CNN.

Está compuesto por tres códigos:

1- Aula_28_Descarga_Imagenes.py
-------------------------------
En este primer código accedemos a:
dataset_url = https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz"

De donde descargamos las imagenes necesarias para realizar el posterior modelo.
Las imagenes se guardaran, en nuestro usuario de Linux -Ubuntu-, en un fichero oculto (.Keras),
en un directorio llamado Datasets, en mi caso con la siguiente ruta: /home/margarito/.keras/datasets/flower_photos.
En el directorio:flower_photos, encontraremos las imagenes de las flores, con las clases a que corresponden.

Tres directorios con imágenes de estas clases:

-flower_photos
--daisy
--dandelion
--roses
--sunflowers
--tulips

Con el fin de utilizar estas imagenes de forma indirecta, copiaremos el directorio:-flower_photos
y lo pegaremos en nuestro directorio de usuario.
Al ejecutar este código, se muestra una imagen de cada clase.
---------------------------------------------------
Librerías necesarias a cargadas en vuestro sistema para la ejecución de este código:

import matplotlib.pyplot as plt
import numpy as np
import os
import PIL
import tensorflow as tf

from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.models import Sequential
import pathlib


*************************************************************************************************************
2-Aula_28_Entreno_Modelo.py
--------------------------
Con este código, lo que hacemos es entrenar el modelo, salvandolo una vez entrenado en nuestro usuario, en el directorio donde tengamos nuestros códigos.

Básicamente este código hace lo siguiente:

Este código en Python utiliza TensorFlow y Keras para construir y entrenar una red
neuronal convolucional (CNN) para clasificar imágenes de flores. Aquí está el desglose de lo que hace cada parte del código:

Importación de bibliotecas:
Importa TensorFlow y algunas clases específicas
de Keras necesarias para el procesamiento de imágenes.

Definición de directorios y ruta del modelo:
Establece las rutas de los directorios donde se encuentran
los datos de entrenamiento de imágenes de flores y donde se guardará el modelo entrenado.

Parámetros de entrenamiento:
Define los parámetros para el entrenamiento,
como el tamaño del lote, la altura y el ancho de las imágenes, y el número de épocas.

Generador de datos de entrenamiento:
Crea un generador de datos de imágenes de entrenamiento
utilizando la clase ImageDataGenerator de Keras.
Esta clase realiza aumento de datos, como escalamiento, recorte, volteo horizontal, etc.

Configuración de generadores de flujo de datos de entrenamiento
y validación:
Configura los generadores de flujo de datos
de entrenamiento y validación utilizando el directorio de datos
de entrenamiento y especificando la división para la validación.

Creación del modelo CNN:
Define el modelo de la CNN utilizando
Sequential de Keras, que es una pila lineal de capas.
El modelo consta de varias capas convolucionales y de agrupación (pooling),
seguidas de capas totalmente conectadas. La última capa utiliza una función
de activación softmax para la clasificación de las clases de flores.

Compilación del modelo:
Compila el modelo especificando el optimizador,
la función de pérdida y las métricas para el entrenamiento.

Entrenamiento del modelo:
Entrena el modelo utilizando los generadores de flujo de datos de entrenamiento y validación.

Guardado del modelo:
Guarda el modelo entrenado en la ruta especificada.

Mensaje de finalización:
Imprime un mensaje para indicar que el modelo ha sido entrenado y guardado correctamente.

Como podéis apreciar, en mi caso de linux, las rutas donde tengo los datos,
y el lugar donde gusrado el modelo, es el siguiente:
# Rutas de los directorios de datos
train_dir = '/home/margarito/python/flower_photos'
model_path = '/home/margarito/python/Mi_Modelo_Hilario.h5'
******************************************************************************************************************

Librerías necesarias a cargadas en vuestro sistema para la ejecución de este código:
import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator
-------------------------------------------------------------------------------------
3-Aula_28_Probar_Modelo.py
-------------------------
Con este código voy a probar el modelo.
En mi caso he sacado una fotografia, a una flor silvestre de diente de leon,
con el fin de evaluar el acierto de mi programa.
Este programa podría resumirse de la siguiente forma:

Este código realiza la inferencia de una imagen de flor utilizando un modelo de red neuronal convolucional (CNN) previamente entrenado. Aquí está el desglose de lo que hace cada parte del código:

Importación de bibliotecas:
Importa las bibliotecas necesarias, incluyendo NumPy para manipulación de matrices
y TensorFlow para el uso del modelo y la preprocesamiento de imágenes.

Cargar el modelo previamente entrenado:
Carga el modelo de CNN previamente entrenado desde la ruta especificada en modelo_ruta.

Ruta de la imagen de la flor:
Define la ruta de la imagen de la flor que se desea clasificar.

Cargar y redimensionar la imagen:
Carga la imagen de la flor desde la ruta especificada
y la redimensiona al tamaño requerido por el modelo, que es 224x224 píxeles.

Convertir la imagen a un array numpy:
Convierte la imagen cargada en un array numpy para que pueda ser procesada por el modelo.

Preprocesamiento de la imagen:
Realiza cualquier preprocesamiento necesario en la imagen, en este caso,
expandiendo las dimensiones del array para que coincida con el formato de entrada esperado por el modelo.

Normalización de los valores de píxeles:
Normaliza los valores de píxeles de la imagen para que estén en el rango de 0 a 1,
lo que es comúnmente necesario para la entrada de los modelos de redes neuronales.

Hacer la predicción:
Utiliza el modelo cargado para realizar la predicción en la imagen preprocesada.

Obtener la clase predicha:
Identifica la clase predicha asignando etiquetas de clases a las salidas del modelo
y seleccionando la clase con el valor de probabilidad más alto.

Imprimir la clase predicha:
Imprime la clase predicha de la flor en la imagen.

En resumen, este código toma una imagen de una flor,
la procesa adecuadamente para que pueda ser ingresada
al modelo, la clasifica utilizando el modelo
previamente entrenado y luego imprime la
clase predicha de la flor en la imagen.
------------------------------------------------------
Librerías necesarias a cargadas en vuestro sistema para la ejecución de este código:

import numpy as np
import tensorflow as tf
from tensorflow.keras.preprocessing import image

*********************************************************************************
Estos ejercicios han sido realizados y ejecutados bajo consola linux.
Concretamente bajo Ubuntu 20.04.6 LTS.
Fueron editados con Sublime text.

Debereis de tener en cuenta que para la ejecución de los ejercicios
deberéis tener instaladas las librerías y módulos necesarios, segfún se indica en cada código.
----------------------------------------------

SALIDA, EN MI CASO DEL EJERCICIO DE LA IMAGEN PROPUESTA DE EVALUACIÓN:

2024-03-24 12:47:54.765845: I tensorflow/tsl/cuda/cudart_stub.cc:28] Could not find cuda drivers on your machine, GPU will not be used.
2024-03-24 12:47:54.797982: I tensorflow/tsl/cuda/cudart_stub.cc:28] Could not find cuda drivers on your machine, GPU will not be used.
2024-03-24 12:47:54.798348: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.
To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.
2024-03-24 12:47:55.329900: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT

1/1 [==============================] - ETA: 0s
1/1 [==============================] - 0s 114ms/step
La flor en la imagen es: dandelion
[Finished in 2.9s]
Imágen de perfil

Comprobar eficacia, código CNN.


Python

Publicado el 6 de Marzo del 2024 por Hilario (145 códigos)
361 visualizaciones desde el 6 de Marzo del 2024
IMAGEN A PREDECIR.
-----------------------------

zapato

El codigo de estudio, fue recogido en la página oficial de Tensorflow, con el Copyright (c) 2017 de François Chollet.

Ver nota final de uso.
Lo que trato con este ejercicio, es añadirle un tramo de código, con el fin de probar su eficacia al añadirle la predicción de una imagen aportada por mí.
Por lo que pude apreciar, los resultados no son del todo halagueños.


# Copyright (c) 2017 François Chollet
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.
Imágen de perfil

PyTorch


Python

Publicado el 29 de Febrero del 2024 por Hilario (145 códigos)
457 visualizaciones desde el 29 de Febrero del 2024
Imagen a predecir.

***********************************************************
perro

********************************************************************************************************************

Propongo el ejercicio: Aula_18_Ejercicio_torch.py
Este ejercicio fue realizado con PyTorch.
En mi caso lo he editado con Sublime text, y lo he ejecutado bajo consola
con Ubuntu 20.04.6 LTS.

Si se tuviera problemas para ejecutarlo bajo consola linux, por sosportación CUDA, al no tener GPU Nvidia, se podría optar
por su edición y ejecución bajo Google Colab, utilizando Drive de Google, como almacenamiento.
*******************************************************************************************************************
El ejercicio, muestra la opción más posible por porcentajes, y nos remite a una página web para comprobar el resultado.

Vease una salida tipo:

SALIDA POR CONSOLA LINUX.
West Highland white terrier 0.7944785952568054
Maltese dog 0.025748323649168015
Norwich terrier 0.013491143472492695
Scotch terrier 0.0073037706315517426
cairn 0.005692108068615198
Para ver imágenes de 'West Highland white terrier', visita: https://www.google.com/search?q=West+Highland+white+terrier&tbm=isch

****************************************************************************************************************************************************************************************************************************************
PyTorch, un marco de trabajo de aprendizaje profundo (deep learning) de código abierto desarrollado por Facebook. PyTorch es conocido por su flexibilidad y facilidad de uso, y es utilizado tanto en la investigación académica como en la producción industrial para desarrollar y entrenar modelos de aprendizaje profundo.

A continuación, se describen algunos aspectos clave de PyTorch:

Tensores:
PyTorch utiliza tensores como su estructura de datos fundamental. Los tensores son similares a los arreglos multidimensionales de NumPy y pueden representar datos numéricos para entrenar modelos de aprendizaje profundo.
Autograd:
PyTorch incorpora un sistema de diferenciación automática llamado Autograd. Este sistema permite calcular automáticamente gradientes para los tensores, facilitando la retropropagación y el entrenamiento de modelos.
Dinámica de gráficos computacionales:
A diferencia de algunos otros marcos de trabajo de aprendizaje profundo que utilizan gráficos computacionales estáticos, PyTorch utiliza gráficos computacionales dinámicos. Esto proporciona flexibilidad al construir y modificar dinámicamente la estructura del grafo durante la ejecución.
API amigable:
PyTorch ofrece una API amigable y fácil de usar que facilita el proceso de experimentación y desarrollo. Esto ha contribuido a su popularidad en la comunidad de investigación y desarrollo de aprendizaje profundo.
Módulos para visión, procesamiento de lenguaje natural, etc.:

PyTorch cuenta con diversos módulos y paquetes, como torchvision para visión por computadora, torchtext para procesamiento de lenguaje natural, y otros, que facilitan el desarrollo de modelos en diversas áreas de aplicación.
Compatibilidad con GPU:
PyTorch está diseñado para aprovechar el rendimiento de las GPU para acelerar el entrenamiento de modelos. Esto se logra mediante la ejecución de operaciones en tensores en GPU cuando sea posible.

Comunidad activa y soporte:

PyTorch cuenta con una comunidad activa de usuarios y desarrolladores, y hay una amplia variedad de recursos, tutoriales y documentación disponible.
En resumen, PyTorch (o simplemente torch en referencia a su nombre de paquete) es un marco de trabajo de aprendizaje profundo que ha ganado popularidad debido a su flexibilidad, facilidad de uso y la adopción en la comunidad de investigación y desarrollo de inteligencia artificial.


********************************************************************************************************************
Este script de Python utiliza PyTorch y la biblioteca de visión de torchvision para cargar un modelo de red neuronal preentrenado
(GoogleNet) y realizar inferencias sobre una imagen específica. Aquí está una descripción paso a paso del código:

Importación de bibliotecas:
import torch
from PIL import Image
from torchvision import transforms

torch: Librería principal de PyTorch.
Image: Clase de la biblioteca Python Imaging Library (PIL) para trabajar con imágenes.
transforms: Módulo de torchvision que proporciona funciones para realizar transformaciones en imágenes, como cambiar el tamaño, recortar, etc.

***********************************************************************
Carga del modelo preentrenado:

model = torch.hub.load('pytorch/vision:v0.10.0', 'googlenet', pretrained=True)
model.eval()

*******************************************************************************
Preprocesamiento de la imagen:

preprocess = transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])

Se define una serie de transformaciones para preprocesar la imagen, incluyendo el cambio de tamaño, recorte, conversión a tensor y normalización.
*******************************************************************************
Carga de la imagen y aplicación del preprocesamiento:

input_image = Image.open(image_path_drive)
input_tensor = preprocess(input_image)
input_batch = input_tensor.unsqueeze(0)

Se carga la imagen desde la ruta especificada y se aplica el preprocesamiento.
**************************************************************************************
Transferencia a GPU (si está disponible):
if torch.cuda.is_available():
input_batch = input_batch.to('cuda')
model.to('cuda')

Si la GPU está disponible, se mueve tanto la entrada como el modelo a la GPU.
**********************************************************************************************
Inferencia del modelo:
with torch.no_grad():
output = model(input_batch)
Se realiza la inferencia en el modelo preentrenado para obtener las puntuaciones de salida
**************************************************************************************************
Postprocesamiento y visualización de resultados:
probabilities = torch.nn.functional.softmax(output[0], dim=0)
top5_prob, top5_catid = torch.topk(probabilities, 5)

for i in range(top5_prob.size(0)):
print(categories[top5_catid[i]], top5_prob[i].item())

Se calculan las probabilidades utilizando softmax y se imprimen las cinco categorías principales junto con sus puntuaciones de confianza.
*********************************************************************************************************

Búsqueda en Google Imagenes:

top_category = categories[top5_catid[0]]
search_query = top_category.replace(" ", "+")
search_link = f"https://www.google.com/search?q={search_query}&tbm=isch"
print(f"Para ver imágenes de '{top_category}', visita: {search_link}")

Se selecciona la categoría principal (la de mayor puntuación) y se construye un enlace para buscar imágenes relacionadas en Google Images.
********************************************************************************************************************

En resumen, este programa demuestra cómo cargar un modelo preentrenado, realizar inferencias en una imagen,
y luego visualizar las categorías principales y realizar una búsqueda en Google Images basada en la categoría principal identificada por el modelo.

********************************************************************************************************************

EXIGENCIAS PARA SU DEBIDA EJECUCIÓN BAJO LINUX.
----------------------------------------------

Preparar la carga de librerías para un sistema Linux.
En concreto: Ubuntu 20.04.6 LTS. Se deberán cargar de
la siguiente forma, y en esta secuencia, en consola Linux:

sudo apt-get update
sudo apt-get install -y python3-pip python3-dev python3-venv
sudo apt-get install -y libopenblas-base libopenmpi-dev

-----------------------------------------------------
python3 -m venv myenv
source myenv/bin/activate

----------------------------------------------------
pip install torch torchvision torchaudio

----------------------------------------------
Comprobamos que todo ha ido bien:
import torch
print(torch.__version__)

----------------------------------------------------
También debemos descargar a nuestro directorio actual de ejecucion:imagenet_classes.txt
con este comando:
wget https://raw.githubusercontent.com/pytorch/hub/master/imagenet_classes.txt

Debemos bajar la imagen de una raza de perro, y proporcionar la ruta para
que el programa haga la predicción. En mi caso sería:
image_path_drive = '/home/margarito/python/perro.jpg'

****************************************************************************
Como comenté en mi caso, el ejercicio fue realizado en una plataforma Linux.
Ubuntu 20.04.6 LTS.
Ejecución bajo consola con este comando:
python3 Aula_18_Ejercicio_torch.py

----------------------------------------------------------------------------------------------------------------------------------------
Imágen de perfil

Red-CNN Detección de bordes


Python

Publicado el 19 de Febrero del 2024 por Hilario (145 códigos)
497 visualizaciones desde el 19 de Febrero del 2024
Figure_1
Figure_2

Los kernels Sobel son filtros utilizados comúnmente en procesamiento de imágenes para realizar operaciones de convolución, especialmente en el contexto de detección de bordes. Estos filtros están diseñados para resaltar cambios rápidos en la intensidad de los píxeles en una imagen, lo que generalmente indica la presencia de bordes.

El operador Sobel consiste en dos kernels, uno para la detección de cambios horizontales y otro para cambios verticales. Estos kernels son matrices pequeñas que se aplican a la imagen mediante la operación de convolución. Los kernels Sobel comúnmente utilizados son los siguientes:

Kernel Sobel para detección de bordes horizontales (kernel_sobel_x):

[ -1, 0, 1]
[ -2, 0, 2]
[ -1, 0, 1]

Kernel Sobel para detección de bordes verticales (kernel_sobel_y):

[ 1, 2, 1]
[ 0, 0, 0]
[-1, -2, -1]

La operación de convolución implica deslizar estos kernels sobre la imagen original, multiplicando los valores de los píxeles en la región correspondiente del kernel y sumándolos para obtener un nuevo valor en la posición central. Este proceso se repite para cada píxel en la imagen, generando así dos nuevas imágenes filtradas: una resaltando cambios horizontales y otra resaltando cambios verticales.

La magnitud de los bordes se calcula combinando las respuestas horizontales y verticales mediante una fórmula de magnitud Euclidiana.

Este resultado proporciona una representación de la intensidad de los bordes en la imagen original, lo cual es útil para tareas como detección de contornos. En el código que compartiste anteriormente, estos kernels Sobel se utilizan para realizar la detección de bordes en la imagen cargada.


Este programa en Python: python3 Aula_28_bordes_CNN.py, realiza la detección de bordes en una imagen utilizando el operador Sobel. Aquí tienes una explicación paso a paso:

Cargar la imagen:
Utiliza la biblioteca OpenCV (cv2) para cargar una imagen desde la ruta "/home/margarito/python/tulipanes.jpeg".
Verifica si la carga de la imagen fue exitosa.

Convertir la imagen a formato RGB:
Utiliza la función cv2.cvtColor para convertir la imagen cargada (en formato BGR) a formato RGB.
Muestra la imagen original utilizando la biblioteca matplotlib.

Definir los kernels Sobel:
Define dos kernels Sobel, uno para la detección de bordes horizontales (kernel_sobel_x) y otro para la detección de bordes verticales (kernel_sobel_y).

Aplicar los filtros Sobel:
Utiliza la función cv2.filter2D para aplicar los filtros Sobel a la imagen original, obteniendo dos imágenes resultantes (imagen_bordes_x e imagen_bordes_y), que representan los bordes horizontales y verticales, respectivamente.

Calcular la magnitud de los bordes:
Calcula la magnitud de los bordes combinando las imágenes resultantes de los filtros Sobel mediante la fórmula de la magnitud Euclidiana.

Verificar si hay datos válidos en la matriz antes de normalizar:
Antes de normalizar la magnitud de los bordes, verifica si hay datos válidos en la matriz utilizando np.any.

Convertir a tipo de datos float32 antes de normalizar:
Convierte la matriz de magnitud de bordes a tipo de datos float32. Esto es necesario para evitar problemas de normalización con tipos de datos no compatibles.

Normalizar la imagen:
Utiliza el método de normalización para escalar los valores de la magnitud de los bordes al rango [0, 1]. Esto es importante para visualizar correctamente la imagen de bordes.

Mostrar la imagen con bordes:
Utiliza plt.imshow para mostrar la imagen resultante de la detección de bordes en escala de grises.
Muestra un título indicando que se ha aplicado el operador Sobel para la detección de bordes.

Manejar casos donde la matriz de magnitud de bordes está vacía:
Si la matriz de magnitud de bordes está vacía (todos los elementos son cero), imprime un mensaje indicando que la matriz está vacía o no contiene datos válidos.

En resumen, este programa carga una imagen, aplica el operador Sobel para detectar bordes y muestra la imagen resultante de la detección de bordes. Además, maneja casos donde la matriz de magnitud de bordes no contiene datos válidos.
Imágen de perfil

Generador de contraseñas.


Python

estrellaestrellaestrellaestrellaestrella(3)
Actualizado el 30 de Enero del 2024 por Antonio (77 códigos) (Publicado el 2 de Agosto del 2021)
10.429 visualizaciones desde el 2 de Agosto del 2021
Programa para generar contraseñas de forma aleatoria, de hasta 50 caracteres. Cuenta con un campo "LENGTH" para especificar la longitud de la contraseña, un campo "MIN LOWERCASE" para especificar el número mínimo de caracteres en minúsculas, un campo "MIN UPPERCASE" para el número mínimo de caracteres en mayúsculas y un campo "MIN NUMBERS" para especificar el número mínimo de caracteres numéricos.
PARA CUALQUIER DUDA U OBSERVACIÓN USEN LA SECCIÓN DE COMENTARIOS.
pg
Imágen de perfil

ImageDataGenerator.


Python

Publicado el 23 de Enero del 2024 por Hilario (145 códigos)
532 visualizaciones desde el 23 de Enero del 2024
palomas
descarga

********************************************************************************************************************
En este breve ejercicio, pretendo explicar algunas dudas sobre la utilizacion de ImageDataGenerator.
Esta función se utiliza en las redes convolucionales, para nodificar los parámetros o apariencia de las imagenes
utilizadas para el training, con el propósito principal de mejorar el rendimiento y la generalización del modelo mediante el aumento de datos y la normalización.

Aquí están los objetivos clave:
--------------------------------------

Aumento de Datos para Mejor Generalización:

El aumento de datos implica aplicar transformaciones aleatorias a las imágenes durante el entrenamiento, como rotación, cambio de escala, volteo horizontal, etc. Este proceso aumenta la diversidad del conjunto de datos, permitiendo que el modelo vea variaciones de las imágenes originales. Como resultado, la CNN se vuelve más robusta y generaliza mejor a nuevas imágenes que puede encontrar durante la inferencia.

Prevención de Sobreajuste (Overfitting):

El sobreajuste ocurre cuando un modelo aprende demasiado bien los detalles específicos del conjunto de entrenamiento y tiene dificultades para generalizar a datos no vistos. El aumento de datos ayuda a prevenir el sobreajuste al introducir variaciones artificiales en las imágenes de entrenamiento. Esto es crucial cuando el conjunto de datos es relativamente pequeño.

Normalización para Facilitar el Entrenamiento:

La normalización de píxeles (escalando valores a un rango específico, como [0, 1]) facilita el proceso de entrenamiento. Al tener valores de píxeles en un rango más pequeño, los gradientes durante el entrenamiento son más estables, lo que puede llevar a una convergencia más rápida del modelo.

Manejo Eficiente de Grandes Conjuntos de Datos:

Cuando trabajas con grandes conjuntos de datos que no caben completamente en la memoria, ImageDataGenerator permite cargar y procesar las imágenes de manera eficiente en lotes durante el entrenamiento. Esto es esencial para hacer frente a conjuntos de datos de tamaño considerable.
En resumen, ImageDataGenerator contribuye significativamente a mejorar la capacidad de generalización de una CNN, a hacer que el modelo sea más robusto frente a variaciones en los datos y a facilitar el proceso de entrenamiento, especialmente cuando se trata de conjuntos de datos grandes.

********************************************************************************************************************
Un ejemplo típico de argumentos pasados a ImageDataGenerator sería el siguiente:

datagen = ImageDataGenerator(
rescale=1./255, # Normalización
rotation_range=20, # Rango de rotación aleatoria
width_shift_range=0.2, # Rango de cambio horizontal aleatorio
height_shift_range=0.2, # Rango de cambio vertical aleatorio
shear_range=0.2, # Rango de cizallamiento aleatorio
zoom_range=0.2, # Rango de zoom aleatorio
horizontal_flip=True # Volteo horizontal aleatorio
)

********************************************************************************************************************
********************************************************************************************************************
Este programa ha sido editado y ejecutadoi con Google Colab.
El archivo de jemplo estaba alojado en Drive de Google Colab.


---------------------------------------------------------------------------------------------------------------------------