Curso sobre programacion c# y Visual Studio 2019. En este blog veremos tutoriales para aprender a crear nuestras aplicaciones de consola,aplicaciones web, SQL , Tensorflow y Machine Learning
Hola a todos.Seguimos con nuestro curso dedicado a los patrones de diseño software.Los patrones de diseño son unas técnicas para resolver problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces.
En esta ocasión veremos el patrón de diseño Prototype superficial. El patrón de diseño prototipo tiene como finalidad crear nuevos objetos clonando una instancia creada previamente.
Este patrón especifica la clase de objetos a crear mediante la clonación de un prototipo que es una instancia ya creada. La clase de los objetos que servirán de prototipo deberá incluir en su interfaz la manera de solicitar una copia, que será desarrollada luego por las clases concretas de prototipos.
En el siguiente vídeo tenéis un ejemplo de este patrón de diseño.
Os dejo el código visto en el vídeo:
* Clase Mueble:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Prototype_superficial
{
class Mueble:ICloneable
{
private int numAsientos;
private string nombre;
public int NumAsientos { get => numAsientos; set => numAsientos = value; }
public string Nombre { get => nombre; set => nombre = value; }
Hola a todos.Seguimos con nuestro curso dedicado a los patrones de diseño software.Los patrones de diseño son unas técnicas para resolver problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces.
En esta ocasión veremos el patrón de diseño Singelton. Es un patrón de diseño que permite restringir la creación de objetos pertenecientes a una clase o el valor de un tipo a un único objeto.Su intención consiste en garantizar que una clase solo tenga una instancia y proporcionar un punto de acceso global a ella.
El patrón singleton se implementa creando en nuestra clase un método que crea una instancia del objeto solo si todavía no existe alguna. Para asegurar que la clase no puede ser instanciada nuevamente se regula el alcance del constructor.
En el siguiente vídeo tenéis un ejemplo de este patrón de diseño.
Hola a todos.Seguimos con nuestro curso dedicado a los patrones de diseño software.Los patrones de diseño son unas técnicas para resolver problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces.
En esta ocasión veremos el patrón de diseño Builder, que separa la creación de un objeto complejo de su representación, de modo que el mismo proceso de construcción pueda crear representaciones diferentes. Básicamente significa que en lugar de implementar la creación de un objeto en el constructor de la clase, habrá otras clases encargadas de crear el objeto y asignarles las propiedades iniciales. Cada una de estas "otras" clases será un builder. Y cada uno de estos builders será capaz de crear un objeto nuevo con ciertas características.
En nuestro caso la jerarquía de clase que hemos creado tiene el aspecto que veis en la imagen:
En el siguiente vídeo vemos con un ejemplo como construir esta estructura de clases basándonos en el patrón de diseño Builder.
Os dejo el código de las diferentes clases vistas en el vídeo:
*Clase ConexionBuilder:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Builder
{
// Builder
public abstract class ConexionBuilder
{
protected CadenaConexion conexion;
public CadenaConexion dameCadenaConexion() { return conexion; }
Hola a todos.Una vez finalizado el curso de google nos disponemos a crear nuestro propio clasificador de imágenes.En esta segunda entrada veremos en detalle el código implementado para poder entrenar nuestro modelo.
Os dejo un vídeo donde explico que hace el código implementado con el objetivo de clasificar nuestros conjuntos de imágenes de perros y de gatos que descargamos en el capítulo anterior:
Os dejo el código visto en el vídeo:
#importamos librerias necesarias
import sys
from PIL import Image
sys.modules['Image'] = Image
import os
from tensorflow.python.keras import optimizers #libreria optimizadores para entrenar modelo
from tensorflow.python.keras.preprocessing.image import ImageDataGenerator # libreria prepocesa imagenes
from tensorflow.python.keras.layers import Dropout, Flatten, Dense, Activation # Libreria para las capas
from tensorflow.python.keras.layers import Convolution2D, MaxPooling2D #capas donde hacemos convuliones
from tensorflow.python.keras.models import Sequential # libreria para redes neuronales secuenciales
from tensorflow.python.keras import backend as K
from tensorflow.python.keras import applications
K.clear_session() # limpiamos por si hubiera algo corriendo
Hola a todos.Hoy os traigo información sobre como descargar e instalar el nuevo visual studio 2019. Podemos descargar este nuevo entorno de desarrollo desde la página oficial de microsoft.
Existe un enlace de descarga gratuito que os dejo a continuación:
Algunas de las novedades más destacadas que nos trae este Visual Studio 2019 es que mejora la navegación a través del código y mejora la sección de plantillas para que sea más fácil iniciar un nuevo proyecto. También se ha mejorado la experiencia de depuración, y todas las novedades funcionan tanto con proyectos existentes como con los nuevos.Desde aplicaciones cross-plataforma escritas en C++, hasta aplicaciones móviles .NET para iOS y Android escritas en Xamarin, o aplicaciones basadas en la nube que usen los servicios de Azure.
En el siguiente vídeo podéis ver como descargarlo e instalarlo.También creamos nuestro primer proyecto:
Hola a todos.Una vez finalizado el curso de google nos disponemos a crear nuestro propio clasificador de imágenes.En esta primera entrada de las dos que dedicaremos a este tema veremos como preparar nuestra máquina para poder realizar este ejercicio.
Para poder entrenar el modelo correctamente necesitaremos bastantes imágenes de los elementos que queremos clasificar. Para este objetivo me he ayudado de un plugin de chrome que nos permite bajar todas la imágenes de una página de manera automática. El plugin es este. Además para facilitar el entrenamiento de nuestro modelo hemos utilizado un modelo preentrenado de google.
Hola a todos.Seguimos con nuestro curso dedicado a los patrones de diseño software.Los patrones de diseño son unas técnicas para resolver problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces.
En esta entrada veremos el patrón de diseño Factory, que consiste en utilizar una clase constructora abstracta con unos cuantos métodos definidos y otros abstractos. Es un patrón de diseño creacional y que sirve para construir una jerarquía de clases. En nuestro caso la jerarquía de clase que hemos creado tiene el aspecto que veis en la imagen:
En el siguiente vídeo vemos con un ejemplo como construir esta estructura de clases basándonos en el patrón de diseño factory.
Os dejo el código de las diferentes clases vistas en el vídeo:
*Clase BaseDatosGenerica:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Factory
{
public abstract class BaseDatosGenerica
{
public abstract string dameCadenaConexion();
}
}
*Clase Oracle:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Factory
{
class Oracle:BaseDatosGenerica
{
public override string dameCadenaConexion()
{
return "CAdena conexión base de datos Oracle";
}
}
}
*Clase SqlServer
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Factory
{
class SqlServer:BaseDatosGenerica
{
public override string dameCadenaConexion()
{
return "Cadena conexión base de datos SQlServer";
}
}
}
*Clase MySql
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Factory
{
class MySql:BaseDatosGenerica
{
public override string dameCadenaConexion()
{
return "Cadena conexión base de datos Mysql";
}
}
}
* Clase Configuracion:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Factory
{
class Configuracion
{
public const int SqlServer = 1;
public const int Oracle = 2;
public const int MySql = 3;
public BaseDatosGenerica CrearConexion(int BaseDatos)
{
BaseDatosGenerica baseDatos = null;
if (BaseDatos == 1)
baseDatos = new SqlServer();
else if (BaseDatos == 2)
baseDatos = new Oracle();
else if (BaseDatos == 3)
baseDatos = new MySql();
else
throw new Exception("Base de datos no soportada");
Hola a todos.Hoy comenzamos un nuevo curso dedicado a los patrones de diseño software.Los patrones de diseño son unas técnicas para resolver problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces.En definitiva un patrón de diseño es una forma reutilizable de resolver un problema común.
Algunos de lo motivos por lo que se usan son los siguientes: ahorran tiempo y nos ayudan a estar seguros de la validez de nuestros código.Además los patrones de diseño establecen un lenguaje común entre todos los miembros del equipo.
Quizás lo mas complicado es elegir que patrón de diseño se adapta mejor para resolver nuestro problema, para ello es necesario conocer qué tipo de problemas soluciona cada uno y descubrir cómo aplicarlo a casos concretos.
Patrones creación: Son los que facilitan la tarea de creación de nuevos objetos, de tal forma que el proceso de creación pueda ser desacoplado de la implementación del resto del sistema.Los patrones creacionales están basados en la encapsulación, ya que nos facilitan la tarea de creación de nuevos objetos encapsulando el proceso.Los que veremos en este curso son:
Factory
Builder
Singleton
Prototype superficial
Prototype deep
Patrones estrucuturales: Son patrones que nos facilitan la modelización de nuestros software especificando la forma en la que unas clases se relacionan con otras:
Adapter
Facade
Proxy
Bridge
Patrones comportamiento:
Memento
Strategy
Iterator
En siguiente vídeo os cuento en consistirá el curso:
Una incorporación es un espacio de dimensiones relativamente bajas al que se pueden trasladar vectores de dimensiones altas. Las incorporaciones permiten llevar a cabo el aprendizaje automático con más facilidad en entradas de gran tamaño.
El filtrado colaborativo es la tarea de realizar predicciones acerca de los intereses de un usuario en función de los intereses de muchos otros usuarios. Por ejemplo,observemos la tarea de recomendación de películas. Imagina que tenemos 1,000,000 usuarios y una lista de las películas que cada uno de ellos ha visto (de un catálogo de 500,000 películas). Nuestro objetivo es recomendar películas a los usuarios. Para resolver este problema, se necesita un método que determine qué películas son similares entre sí. En la imagen vemos como hemos agrupado las películas similares cerca.
Si distribuimos las películas en una incorporación de dos dimensiones, definimos una distancia entre las películas de manera tal que las películas estén cerca entre sí (y por lo tanto se infiere que son similares). En términos más generales, lo que hicimos es asignar estas películas a un espacio de incorporación, donde se describe cada palabra mediante un conjunto de coordenadas en dos dimensiones. Por ejemplo, en este espacio, "Shrek" se asigna a (-1.0, 0.95) y "Bleu" se asigna a (0.65, -0.2).
En general, al aprender una incorporación de d dimensiones, cada película se representa con d números de valores reales y cada uno de ellos proporciona la coordenada en cada dimensión. Los datos categóricos hacen referencia a atributos de entrada que representan uno o más elementos discretos de un conjunto de opciones finito.Se representan de manera más eficaz a través de tensores dispersos, que son tensores con muy pocos elementos distintos de cero. Por ejemplo, si queremos crear un modelo de recomendaciones de películas, podemos asignar un ID único a cada película posible y, luego, representar al usuario como un tensor disperso de las películas que ha mirado, tal como se muestra en la Figura.
Cada fila de la matriz en la Figura 3 corresponde a un usuario y puede ser representado con un tensor disperso, ya que cada usuario solo mira una pequeña fracción de las películas posibles. La última fila corresponde al tensor disperso [1, 3, 999999]
Os dejo el vídeo con la explicación:
Os dejo el código visto en el vídeo:
"""Objetivos:
- En este ejercicio, exploraremos datos dispersos y trabajaremos con incrustaciones utilizando datos de texto de reseñas
de películas (del conjunto de datos de la ACL 2011 IMDB). Estos datos ya han sido procesados en formato tf.Example.
- Convertir datos de cadena de revisión de películas en un vector de características.
- Implementar un modelo lineal de análisis.
- Implementar un modelo neuronal utilizando una incorporación que proyecte datos en dos dimensiones.
- Visualicar la inserción para ver lo que el modelo ha aprendido sobre las relaciones entre las palabras.
"""
#Importemos nuestras dependencias y descarguemos los datos de entrenamiento y prueba
En vídeos anteriores, presentamos modelos de clasificación binaria que podían elegir una de dos opciones posibles, como el caso en el que distinguimos si un correo electrónico dado "es spam" o "no es spam". En este vídeo, investigaremos la clasificación de clases múltiples, que puedes elegir entre posibilidades múltiples. Por ejemplo:
¿Este perro es un beagle, un basset hound o un sabueso?
¿Esta flor es una iris sibirica, hollandica, versicolor o setosa?
Algunos problemas de clases múltiples del mundo real implican elegir entre millones de clases individuales.Por ejemplo, supongamos un modelo de clasificación de clases múltiples que pueda identificar la imagen de lo que fuera.
En la imagen vemos un ejemplo de "uno frente a todos", que es un enfoque que nos proporciona una mane
ra de aprovechar la clasificación binaria. En un problema de clasificación dado con N soluciones posibles, una solución de uno frente a todos consiste en N clasificadores binarios independientes.
Otro posible enfoque es utilizar Softmax. La regresión logística genera un decimal entre 0 y 1.0. Por ejemplo, si un clasificador de correo electrónico tiene un resultado de regresión logística de 0.8, hay un 80% de posibilidad de que un correo electrónico sea spam y un 20% de que no lo sea. La suma de las probabilidades de que un correo electrónico sea spam o no es 1.0.
Softmax lleva esta idea al plano de las clases múltiples. Es decir, softmax asigna probabilidades decimales a cada clase en un caso de clases múltiples. Esas probabilidades decimales deben sumar 1.0. Esta restricción adicional permite que el entrenamiento converja más rápido.
Os dejo un vídeo donde os cuento todo esto:
Os dejo el código visto en el vídeo:
#Capacitar a un modelo lineal y una red neuronal para clasificar los dígitos escritos a mano.
"""
Primero, descargamos el conjunto de datos, importemos TensorFlow y otras utilidades, y carguemos los datos en un dataframe. """