Archivo de la etiqueta: Interesante

Python: qué es y por qué deberías aprender a utilizarlo

¿Sabías que existen más de 700 lenguajes de programación? De hecho, algunas fuentes indican que incluso podrían existir… ¡cerca de 9000 lenguajes de programación! Aprenderlos todos sería imposible pero, por suerte, los más utilizados en la actualidad son solo 50, y entre ellos, se encuentra Python. ¿Quieres saber qué es Python, para qué sirve y por qué es uno de los lenguajes más demandados en el mundo del desarrollo de software? ¡Sigue leyendo!

¿Qué es y para qué sirve Python?

Python es un lenguaje de programación de alto nivel que se utiliza para desarrollar aplicaciones de todo tipo. A diferencia de otros lenguajes como Java o .NET, se trata de un lenguaje interpretado, es decir, que no es necesario compilarlo para ejecutar las aplicaciones escritas en Python, sino que se ejecutan directamente por el ordenador utilizando un programa denominado interpretador, por lo que no es necesario “traducirlo” a lenguaje máquina. 

Python es un lenguaje sencillo de leer y escribir debido a su alta similitud con el lenguaje humano. Además, se trata de un lenguaje multiplataforma de código abierto y, por lo tanto, gratuito, lo que permite desarrollar software sin límites. Con el paso del tiempo, Python ha ido ganando adeptos gracias a su sencillez y a sus amplias posibilidades, sobre todo en los últimos años, ya que facilita trabajar con inteligencia artificial, big data, machine learning y data science, entre muchos otros campos en auge. 

Para que puedas ver lo sencillo que es Python, a continuación tienes un simple programa escrito en este lenguaje, que podrás entender fácilmente incluso si no sabes nada de programación. Se trata de un pequeño aplicativo para calcular un sueldo por horas, algo muy sencillo pero que podría ser perfectamente funcional:

horas = float(input(«Introduce tus horas de trabajo: «))

coste = float(input(«Introduce lo que cobras por hora: «))

sueldo = horas * coste

print(«Tu sueldo es», sueldo)

En las dos primeras líneas se le pide al usuario que introduzca cuántas horas ha trabajado y lo que cobra por hora. En la tercera se hace la operación para calcular el sueldo total y se guarda en una variable. En la última línea de código se imprime por pantalla el resultado. Si, por ejemplo, ponemos que hemos trabajado 8 horas a 15 €, en pantalla se imprimirá “Tu sueldo es de 120”.

Origen de Python

Ahora que ya sabes qué es Python, puede que también quieras saber cómo surgió este increíble lenguaje de programación. A pesar de que pueda parecer algo muy nuevo, Python remonta su origen a principios de los años 90, cuando Guido Van Rossum, un trabajador del Centrum Wiskunde & Informatica (CWI), un centro de investigación holandés, tuvo la idea de desarrollar un nuevo lenguaje basándose en un proyecto anterior, el lenguaje de programación “ABC”, que él mismo había desarrollado junto a sus compañeros.

Su filosofía fue la misma desde el primer momento: crear un lenguaje de programación que fuera muy fácil de aprender, escribir y entender, sin que esto frenara su potencial para crear cualquier tipo de aplicación. En aquellos años, el hardware que había no permitía tal cosa, y es por eso por lo que Python ha resurgido durante los últimos años, porque el avance de la tecnología ha permitido alcanzar el objetivo inicial de este lenguaje de programación adelantado a su tiempo.

¿Dónde se utiliza Python?

Como ya has visto, Python es un lenguaje de programación multiplataforma, algo que permite desarrollar aplicaciones en cualquier sistema operativo con una facilidad asombrosa. Una gran cantidad de tecnologías se llevan muy bien con Python debido a su sencillez y a su gran potencia para el tratamiento de datos, algo que sin duda ha hecho resurgir este lenguaje a nivel laboral, donde cada vez son más las empresas que solicitan expertos en Python.

  • Data analytics y big data: El uso de Python está muy extendido en dos áreas que han estado, y estarán, en boca de todos: el análisis de datos y el big data. Su simplicidad y su gran número de bibliotecas de procesamiento de datos hacen que Python sea ideal a la hora de analizar y gestionar una gran cantidad de datos en tiempo real.

Python está siendo utilizado en la actualidad por muchísimas empresas, tanto de forma directa, como indirecta, ya que detrás de los distintos software de data analytics, muchas veces está este lenguaje interpretado de alto nivel. Analizar una gran cantidad de datos para transformarlos en información útil para el big data es una de las especialidades de Python. 

  • Data mining: La minería de datos o data mining es un proceso que permite analizar grandes bases de datos con el objetivo de predecir futuras tendencias. Se trata de un proceso complejo al que Python puede arrojar luz a través de la limpieza y organización de datos y del uso de algoritmos de aprendizaje automático que simplifica el análisis de datos.
  • Data science: Tras la creación de los motores numéricos como “Pandas” o “NumPy”, Python está desbancando MATLAB, un lenguaje utilizado por científicos a la hora de trabajar con un gran número de datos. La razón es la misma que en los anteriores apartados; la sencillez y la potencia para trabajar con un gran número de datos, unidos al gran número de bibliotecas existentes, hacen que Python sea ideal para este tipo de tareas. 
  • Inteligencia artificial: Seguro que durante los últimos años has oído hablar muchísimo de la inteligencia artificial (IA). Gran parte de su avance se debe a Python. Su facilidad de escritura y su robustez han convertido a Python en el aliado perfecto de la IA. Su capacidad de plasmar ideas complejas en pocas líneas, unidas al gran número de frameworks existentes, han hecho que Python sea uno de los lenguajes de programación que están impulsando a la IA.
  • Blockchain: La base de datos distribuida Blockchain, conocida mundialmente por ser la base sobre la que se sustentan las criptomonedas, también funciona muy bien junto a Python. Como lenguaje versátil, seguro y rápido, es muy útil para formar cadenas de bloques, e incluso permite a los desarrolladores crear una cadena de bloques sencilla en menos de 50 líneas de código, haciendo sencillo algo muy complejo.
  • Machine learning: El machine learningo aprendizaje automático es otra de las tecnologías que está cambiando el mundo tal y como lo conocemos. La robótica y la IA son ahora capaces de aprender por sí mismas a medida que van procesando más y más datos. De esta forma, obtienen información cada vez más relevante que les permite tomar las decisiones adecuadas. Por supuesto, Python es también muy eficaz en este campo, en el tratamiento de datos eficaz es esencial.
  • Desarrollo web: Python también permite desarrollar webs complejas en menos líneas de código, lo que permite que estas sean más ligeras y optimizadas. Django es uno de los frameworks de Python más populares de la actualidad, que puede ser utilizado para crear webs dinámicas y muy seguras. Python es también muy utilizado para hacer scraping, es decir, para obtener información de todo tipo de webs, tal y como lo hacen Netflix, Instagram o Pinterest.
  • Juegos y gráficos 3D: Python también posee una gran capacidad para manejar gráficos 3D gracias la gran cantidad de marcos de trabajo y herramientas existentes. PyGame, Blender o Arcade son algunos de los más conocidos. Uno de los juegos más populares desarrollado con Python es Battlefield 2, un juego de acción bélica lanzado en 2005 en el que el motor gráfico, las animaciones y sus distintas funcionalidades fueron desarrolladas con Python. 

¿Por qué Python es uno de los lenguajes de programación más demandados en el mundo laboral?

Ahora que ya sabes qué es Python y para qué se utiliza, seguro que ya habrás deducido por qué es uno de los lenguajes de programación más demandados en el mundo laboral. Debido a su relación con algunos de los campos con mayor relevancia de la actualidad, como la IA, el Machine Learning o el análisis de datos, se necesitan un gran número de programadores expertos en Python para desarrollar nuevas y emocionantes funciones. 

A pesar de que este lenguaje lleva 30 años en el mercado, las empresas se están encontrando con grandes dificultades para encontrar programadores con conocimientos avanzados de Python. Según el Informe de Empleos Emergentes 2020 de LinkedIn, la demanda de desarrolladores Python ha crecido un 48,73 % respecto al 2019. Los puestos de empleo, como no podía ser de otra forma, están relacionados con las tecnologías de la  información (TIC), las telecomunicaciones y los servicios financieros.

que-es-un-bootcamp

Aprender Python y reorienta tu carrera laboral

Como has podido ver, Python es un lenguaje de programación de código abierto versátil, flexible, multiplataforma y totalmente gratuito, En el presente y en el futuro tendrá una gran relevancia debido a su utilidad en campos tecnológicos en auge como la inteligencia artificial, el big data, el data science, el machine learning, el Blockchain o el desarrollo web. Su uso va en aumento y, por lo tanto, la demanda de programadores expertos en Python, también.

¿Quieres aprender Python y reorientar tu carrera profesional? Las Becas Santander Tech | Reskilling in Data Analytics – Ubiqum Code Academy te ofrecen la oportunidad de hacerlo. Con el objetivo de mejorar la empleabilidad de los jóvenes, Banco Santander impulsa 200 becas para cursar un programa formativo de iniciación al análisis de datos.

Este curso se dividirá en 2 etapas, un curso inicial de Introducción al data analysis, donde podrás aprender a utilizar Python con tareas de minería de datos o aprendizaje automático, y una segunda etapa, reservada para los 50 mejores de la primera, que consistirá en un bootcamp de data analytics y machine learning en el que podrás profundizar en tus conocimientos con el objetivo de reorientar tu carrera laboral hacia el mundo de la economía digital. Este bootcamp tiene una duración de 6 meses, se realiza en la modalidad de part-time y está totalmente centrado en que puedas conseguir un empleo cualificado como programador. En él podrás aprender todo lo que necesitas para incorporarte al mundo laboral del desarrollo de software, utilizando metodologías innovadoras que apuestan por el learn by doing.

La computación cuántica

Vivimos en la era de la tecnología, pero aún no lo hemos visto todo: la computación cuántica, que en los últimos años ha dado pequeños —pero importantes— pasos de la mano de grandes empresas, promete revolucionar casi todo lo que conocemos. A continuación, repasamos sus posibles aplicaciones, que van desde la ciberseguridad a la movilidad pasando por la salud.

Computacion Cuantica

La computación cuántica está llamada a revolucionar la informática.

En un mundo binario de unos y ceros, los ordenadores cuánticos serían como los Albert Einstein de la informática, cerebros electrónicos extraordinarios capaces de realizar en unos segundos tareas casi imposibles para una computadora clásica.La multinacional IBM será la primera en comercializar uno de estos prodigios de la tecnología, el Q System One, un cubo de cristal de unos 3 x 3 metros y 20 qubits que fue presentado en 2019 y estará disponible para el ámbito empresarial y la investigación.

¿QUÉ ES LA COMPUTACIÓN CUÁNTICA?

Esta rama de la informática se basa en los principios de la superposición de la materia y el entrelazamiento cuántico para desarrollar una computación distinta a la tradicional. En teoría, sería capaz de almacenar muchísimos más estados por unidad de información y operar con algoritmos mucho más eficientes a nivel numérico, como el de Shor o el temple cuántico.

Esta nueva generación de superordenadores aprovecha el conocimiento de la mecánica cuántica —la parte de la física que estudia las partículas atómicas y subatómicas— para superar las limitaciones de la informática clásica. Aunque la computación cuántica presenta en la práctica problemas evidentes de escalabilidad y decoherencia, permite realizar multitud de operaciones simultáneas y eliminar el efecto túnel que afecta a la programación actual en la escala nanométrica.

¿QUÉ ES UN QUBIT?

La informática cuántica utiliza como unidad básica de información el qubit en lugar del bit convencional. La principal característica de este sistema alternativo es que admite la superposición coherente de unos y ceros,los dígitos del sistema binario sobre los que gira toda la computación, a diferencia del bit, que solo puede adoptar un valor al mismo tiempo —uno o cero—.

Esta particularidad de la tecnología cuántica hace que un qubit pueda ser cero y uno a la vez, y además en distinta proporción. La multiplicidad de estados posibilita que un ordenador cuántico de apenas 30 qubits, por ejemplo, pueda realizar 10 billones de operaciones en coma flotante por segundo, es decir, unos 5,8 billones más que la videoconsola PlayStation más potente del mercado.

DIFERENCIAS ENTRE LA COMPUTACIÓN CUÁNTICA Y LA TRADICIONAL

La computación cuántica y la tradicional son dos mundos paralelos con algunas similitudes y numerosas diferencias entre sí, como el uso del qubit frente al bit. A continuación, repasamos tres de las más relevantes:

  Lenguaje de programación

La computación cuántica carece de un código propio para programar y recurre al desarrollo e implementación de algoritmos muy específicos. Sin embargo, la informática tradicional cuenta con lenguajes estandarizados como Java, SQL o Python, entre muchos otros.

  Funcionalidad

Un ordenador cuántico no es una herramienta para uso popular ni cotidiano, como un ordenador personal (PC). Estas supercomputadoras son tan complejas que solo tienen cabida en el ámbito corporativo, científico y tecnológico.

  Arquitectura

La composición de un ordenador cuántico es más sencilla que la de uno convencional, y no tiene memoria ni procesador. Estos equipos se limitan a un conjunto de qubits que sirven de base para su funcionamiento.

Salto Cuantico Computacion

El salto cuántico de la computación.

​​​​​​​  VER INFOGRAFÍA: El salto cuántico de la computación [PDF]Enlace externo, se abre en ventana nueva.

CONDICIONES DE FUNCIONAMIENTO DE UN ORDENADOR CUÁNTICO

Estos ordenadores son extremadamente sensibles y necesitan unas condiciones muy concretas de presión, temperatura y aislamiento para funcionar sin errores. La interacción de estas máquinas con partículas externas provoca fallos de medición y el borrado de las superposiciones de estados, de ahí que permanezcan selladas y se tengan que manejar a través de ordenadores convencionales.

Un ordenador cuántico necesita una presión atmosférica casi inexistente, una temperatura ambiente próxima al cero absoluto (-273 °C) y aislarse del campo magnético terrestre para evitar que los átomos se muevan y colisionen entre sí, o interactúen con el entorno. Además, estos sistemas funcionan durante intervalos muy cortos de tiempo, por lo que la información se termina dañando y no puede almacenarse, dificultando aún más la recuperación de los datos.

PRINCIPALES APLICACIONES DE LA COMPUTACIÓN CUÁNTICA

La seguridad informática, la biomedicina, el desarrollo de nuevos materiales y la economía son algunos de los ámbitos que podrían vivir una gran revolución gracias a los avances en computación cuántica. Estos son algunos de sus beneficios más interesantes:

  Finanzas

Las empresas optimizarían aún más sus carteras de inversión y mejorarían los sistemas para la detección del fraude y la simulación.

  Salud

Este sector se beneficiaría en el desarrollo de nuevos medicamentos y tratamientos personalizados genéticamente, así como en la investigación del ADN.

  Ciberseguridad

La programación cuántica conlleva riesgos, pero también avances para la encriptación de datos,como el nuevo sistema Quantum Key Distribution (QKD). Esta nueva técnica para el envío de información sensible utiliza señales luminosas para detectar cualquier intromisión en el sistema.

  Movilidad y transporte

Compañías como Airbus utilizan la computación cuántica para diseñar aviones más eficientes.Además, los qubits permitirán avances notables en los sistemas de planificación del tráfico y la optimización de rutas.

¿Por que aprender C++?

Si están pensando en aprender a programar en C++,  te contamos los motivos por los que aprender C++ como lenguaje de programación. En este artículo vemos las ventajas y desventajas de este lenguaje tan versatil y comparaciones con otros lenguajes.

Ventajas de C++

Las ventajas que tiene C++ sobre otros lenguajes de programación son las siguientes:

  • Tiene un alto rendimiento.
  • Es un lenguaje que se está actualizando, y, por lo tanto, a pesar de tener más de 20 años es moderno.
  • Es multiplataforma.

Lenguaje de alto rendimiento

C++ tiene un alto rendimiento por varios motivos:

  • Permite hacer llamadas directamente al Sistema Operativo.
  • Es un lenguaje compilado para cada plataforma.
  • Tiene muchísimos parámetros de optimización.
  • Tiene un acceso directo a la memoria, que además controla el usuario.
  • Tiene una integración directa con el lenguaje ensamblador, tan directa que incluso permite escribir directamente en ensamblador con las diferentes directivas.

Lenguaje moderno y actualizado

C++ nos permite, entre otras muchas cosas:

  • Crear datos complejos.
  • Definir operaciones sobre los datos complejos.
  • Relacionar los datos complejos entre ellos.
  • Realizar programación genérica y templates, que es hacer una clase del mismo código que sirva para cualquier tipo que pase.
  • Implementar múltiples patrones de diseño

Comparativa con otros lenguajes

Podemos realizar una comparativa de C++ con otros conocidos lenguajes de programacion.

Imagen 0 en Por qué aprender a programar C++
  • Se considera a C++ como un superset de C. De hecho, cuando Bjarne Stroustrup lo creó, comenzó a llamarlo “C con clases”, porque permitía hacer un paradigma de orientación a objetos, a diferencia de C, que no permite objetos.
  • Java y C# tienen una sintaxis muy parecida a C++, porque se quisieron basar en ella para que a los programadores no les costara mucho esfuerzo cambiarse de uno a otro. Funcionan sobre una máquina virtual, con los problemas de eficiencia que eso conlleva, pero también teniendo la ventaja de que no tienen hay que compilar el lenguaje para cada para cada sistema operativo, sino que funciona todo en su máquina virtual.
  • Rust es un lenguaje muy moderno que está surgiendo con fuerza y que está generando grandes expectativas, ya que tiene muchas cosas de programación funcional, al igual que C++, que con el nuevo estándar se está actualizando cada 3 años, y permite hacer programación funcional.
  • Haskell permite una mayor programación funcional que C++, ya que es un lenguaje de programación pura.
  • Scripting es un lenguaje interpretado, parecido a Java y C#, pero que no funciona sobre una máquina virtual sino sobre un proceso.
  • Ensamblador es un lenguaje muy difícil de controlar, muy difícil de programar, muy largo y tedioso, que para ello salieron los lenguajes de alto nivel.

Desventajas de C++

El uso de C++ tiene un coste:

  • Tiene que tener una compilación por plataforma.
  • Es un lenguaje muy amplio, ya que tiene muchos años y muchas líneas de código.
  • Su depuración es bastante complicada, debido a los errores que aparecen.

Resumen

A pesar de las desventajas, C++ es tan interesante porque permite programar en lenguaje de alto nivel, y en caso de necesitarlo, permite bajar incluso a lenguaje ensamblador.

Es decir, es un lenguaje que permite tanto alto, como bajo nivel de programación, para optimizar nuestro programa.

Redes Neuronales Artificiales

Historia de las Redes Neuronales

De los intentos realizados en este sentido se han llegado a definir las líneas fundamentales para la obtención de máquinas inteligentes: En un principio los esfuerzos estuvieron dirigidos a la obtención de autómatas, en el sentido de máquinas que realizaran, con más o menos éxito, alguna función típica de los seres humanos. 
En 1936 Alan Turing estudio el cerebro como una forma de ver el mundo de la computación. Sin embargo, los primeros teóricos que concibieron los fundamentos de la computación neuronal fueron Warren McCulloch un neurofisiólogo y Walter Pitts un matemático quienes en 1943 lanzaron una teoría acerca de la forma de trabajar de las neuronas. Ellos modelaron una red neuronal simple mediante circuitos eléctricos. 
Años más tarde en 1949 Donald Hebb escribió un importante libro en el que explicaba los procesos del aprendizaje desde un punto de vista psicológico, desarrollando una regla de como el aprendizaje ocurría. Su idea fue que el aprendizaje ocurría cuando ciertos cambios en una neurona eran activados. Los trabajos de Hebb formaron las bases de la Teoría de las Redes Neuronales.
Luego en 1957 Frank Rosenblatt desarrolla el Perceptrón, Esta es la red neuronal más antigua utilizándose hoy en día para aplicación como reconocedor de patrones. Este modelo era capaz de generalizar, es decir, después de haber aprendido una serie de patrones podía reconocer otros similares, aunque no se le hubiesen presentado anteriormente. Sin embargo, tenía una serie de limitaciones, por ejemplo, su incapacidad para resolver el problema de la función OR-exclusiva y, en general, era incapaz de clasificar clases no separables linealmente. 
Diez años más tarde Stephen Grossberg realizó una red llamada Avalancha, que consistía en elementos discretos con actividad que varía en el tiempo que satisface ecuaciones diferenciales continuas, para resolver actividades como reconocimiento continúo de habla y aprendizaje de los brazos de un robot. 
En 1969 Marvin Minsky y Seymour Papert probaron (matemáticamente) que el Perceptrón no era capaz de resolver problemas relativamente fáciles, tales como el aprendizaje de una función no-lineal. Esto demostró que el Perceptrón era muy débil, dado que las funciones no-lineales son extensamente empleadas en computación y en los problemas del mundo real. 
Después de varios avances en 1980 Kunihiko Fukushima desarrolló un modelo neuronal para el reconocimiento de patrones visuales.
Al instante en 1986 – David Rumelhart y G. Hinton redescubrieron el algoritmo de aprendizaje de propagación hacia atrás backpropagation. 
En la actualidad, las redes neuronales se componen de numerosas capas de procesamiento, en las cuales se emplean métodos para obtener modelos de representación de los datos de entrada, a través de módulos simples no lineales de representación, que se encargan de extraer las características y patrones de los datos en bruto y transferirlas a capas posteriores más abstractas. Esta forma de trabajar, dota a la red la capacidad de deducir por sí misma, la mejor manera de representar los datos, sin necesidad de haber sido programada explícitamente para ello. 
La forma más frecuente de aprendizaje automático, es el aprendizaje supervisado, en el cual el algoritmo requiere de una función objetivo, para ajustar los pesos de modo tal que las salidas del algoritmo se acerquen a la meta. De tal forma, las redes neuronales de aprendizaje supervisado, necesitan de una función objetivo, la cual es comparada con las salidas de la red, para calcular el valor de la función de costos, y así poder ajustar los pesos de las capas anteriores, de modo tal que en cada iteración se disminuya el error. 
Debido a que una red neuronal profunda puede tener millones de neuronas, y centenares de millones de conexiones (incluso miles de millones), resulta impráctico ajustar uno a uno los pesos, incluso se puede intentar calcular el error mediante un procedimiento analítico empleando derivadas, pero dado el elevado número de variables de la red el proceso sería extremadamente complicado. Es por eso que, el efecto de aprendizaje (reducción del error) se consigue empleando el método de gradiente descendente.
Función de Activación 
Las funciones de activación son una idea tomada de la Biología y que trata de generalizar el hecho de que las neuronas biológicas no son sumadores y transmisores de impulsos, sino que tienen un mecanismo que decide si se activan o no, en función de la entrada que reciben. Es al activarse cuando envían una señal a través de su axón a otras neuronas que la siguen en la cadena de procesamiento.
Que problemas solucionan las redes neuronales
Optimización

  • Determinar una solución que sea óptima
  • Muy utilizado en la gestión empresarial (niveles adecuados de tesorería, de existencias, de producción)

Reconocimiento 

  • Se entrena una Red Neuronal Artificial con entradas como sonidos, números, letras y se procede al test presentando esos mismos patrones con ruido.

Generalización

  • La Red Neuronal Artificial se entrena con unas entradas y el test se realiza con otros casos diferentes.
  • Clasificación

                  Asignar a cada caso su clase correspondiente (préstamos) 

  •         Predicción

                  Lo que más interés despierta (ratio)

Ejemplos 

  •          Conversión de texto escrito a lenguaje hablado.
  •          Compresión de imágenes
  •         Reconocimiento de escritura manual (japonesa)
  •          Visión artificial en robots industriales (inspección de etiquetas, clasificación de                            componentes)

Clasificación respecto a la TopologíaLa topología o arquitectura de una red consiste en la organización y disposición de las neuronas en la red. Las neuronas se agrupan formando capas, que pueden tener muy distintas características. Además las capas se organizan para formar la estructura de la red. Se puede observar en la siguiente figura.
La jerarquía de las redes neuronales :

Donde podemos ver que las neuronas se agrupan para formar capas y las capas se unen entre ellas formando redes neuronales. Para clasificar por la topología usaremos el número de capas en Redes Monocapas o Redes Multicapas.
Redes Monocapas

Las redes monocapa son redes con una sola capa, para unirse las neuronas crean conexiones laterales para conectar con otras neuronas de su capa. Las redes más representativas son la red de Hopfield, la red BRAIN-STATE-IN-A-BOX o memoria asociativa y las maquinas estocásticas de Botzmann y Cauchy.

Entre las redes neuronales monocapa, existen algunas que permiten que las neuronas tengan conexiones a si mismas y se denominan autorecurrentes.

Las redes monocapa han sido ampliamente utilizada en circuitos eléctricos ya que 
debido a su topología, son adecuadas para ser implementadas mediante hardware, usando matrices de diodos que representan las conexiones de las neuronas.
Redes Multicapas
Las redes multicapa están formadas por varias capas de neuronas (2,3…). Estas redes se pueden a su vez clasificar atendiendo a la manera en que se conexionan sus capas.

Usualmente, las capas están ordenadas por el orden en que reciben la señal desde la entrada hasta la salida y están unidas en ese orden. Ese tipo de conexiones se denominan conexiones feedforward o hacia delante.

Por el contrario existen algunas redes en que las capas aparte del orden normal algunas capas están también unidas desde la salida hasta la entrada en el orden inverso en que viajan las señales de información. Las conexiones de este tipo se llaman conexiones hacia atrás, feedback o retroalimentadas.

Redes con conexiones hacia adelante:

Como decíamos antes, Este tipo de redes contienen solo conexiones entre capas hacia delante. Esto implica que una capa no puede tener conexiones a una que reciba la señal antes que ella en la dinámica de la computación.
Ejemplos de estas redes son Perceptron, Adaline, Madaline, Backpropagation y los modelos LQV y TMP de Kohonen.
Redes con conexiones hacia atrás:

Este tipo de redes se diferencia en las anteriores en que si pueden existir conexiones de capas hacia atrás y por tanto la información puede regresar a capas anteriores en la dinámica de la red. Este Tipo de redes suelen ser bicapas.
Ejemplos de estas redes son las redes ART, Bidirectional Associative Memory (BAM) y Cognitron.

Nodos de IA

Ámbito económico.

La aplicación de IA en los procesos de las actividades productivas y de servicios representará un salto cualitativo en el crecimiento de las economías nacionales y supranacionales. En este sentido, debe diseñarse de qué manera las instituciones pueden ayudar a las empresas, grandes y pequeñas, a utilizar estas herramientas y competir en un mundo global, facilitando la investigación, la innovación y la explotación de la IA.

Ámbito educativo.

Es necesario abordar nuevas fórmulas educativas para el conjunto de la sociedad, especialmente para las nuevas generaciones. La ciudadanía debe entender el funcionamiento de los procesos algorítmicos para poder comprender su interrelación diaria con la IA y poder tomar decisiones informadas. Además, es importante considerar aproximaciones educativas a la IA no meramente desde el campo técnico, sino también desde las ciencias sociales, políticas o económicas, las humanidades, las artes, etc.

Ámbito laboral

Uno de los grandes interrogantes de este proceso es el grado de automatización de los procesos productivos. La robotización creciente no sólo afecta al sector industrial, también al de los servicios. Deben asegurarse herramientas para garantizar una transición en el mercado de trabajo que pueda cubrir la demanda de fuerza laboral procedente de sectores automatizados.

Ámbito legal

La proliferación de sistemas autónomos o semiautónomos, dirigidos por algoritmos de IA, como es el caso de los coches autónomos, provoca dudas sobre la determinación de la responsabilidad en caso de que los resultados sean dañinos o infrinjan las normas. Cuestiones como quién es responsable de efectos indeseados en una operación algorítmica (el diseñador, el propietario del algorítmico o la empresa que lo aplica a su negocio) deben determinarse para asegurar la seguridad de la apuesta por la IA.

Ámbito político y democrático

Las plataformas digitales se convirtieron en infraestructuras públicas donde la ciudadanía se informa, opina y decide respecto a debates públicos e institucionales. Las técnicas de IA demostraron ser una herramienta poderosa para modificar el curso de acontecimientos políticos como, por ejemplo, referéndums o elecciones. Las sociedades deben prestar especial atención al efecto público de contenidos automatizados que pueden ser, cada vez más, modificados o incluso creados por algoritmos.

Ámbito social

Parte del desarrollo acelerado de la IA en los últimos años es debido a la proliferación de servicios digitales utilizados por miles de millones de personas. La ciudadanía, a través de su actividad, es generadora de grandes cantidades de datos sobre su actividad, sus gustos, patrones de vida, sus relaciones, opiniones y sentimientos. Con todo, existe un desconocimiento profundo por parte de esta ciudadanía sobre cómo funcionan estos sistemas y de la utilización que se hace de sus datos, convirtiéndolos a menudo en consumidores y generadores de esta tecnología sin pleno conocimiento

Calculadora en Java

En este tutorial aprenderemos a usar la propiedad de la herencia de clases de Java mediante el pequeño ejemplo de una calculadora.

¿Qué es la herencia de clases?

La herencia de clases es la posibilidad de una clase de poder usar los atributos y métodos que ya existen en otra clase distinta, en la Programación Orientada a Objetos (POO) se hace heredando de la clase que contengan los elementos necesarios para tal fin.

La herencia está fuertemente ligada a la reutilización del código en la POO. Esto es, el código de cualquiera de las clases puede ser utilizado sin más que crear una clase derivada de ella, o bien una subclase.

Para poder entender mejor estos conceptos veremos un ejemplo sencillo como lo es el desarrollo de una calculadora con las 4 operaciones básicas (suma, resta, multiplicación y división). Para empezar vamos a definir nuestras clases a usar.

Como podemos observar todas las clases tienen tanto atributos como métodos iguales, esto es perfecto para usar herencia, definimos una nueva clase que contenga todos los atributos y métodos de nuestras 4 clases, a esta nueva clase la llamaremos operación y tendríamos ahora el siguiente esquema:

Como podemos observar ahora tenemos la clase Operacion la cual es una superClase porque contiene atributos y métodos que serán heredados por otras clases, y las clases Suma, Resta, Multiplicacion y division que son las subClases porque heredan atributos y métodos de la superClase Operacion.

Ahora que ya entendimos lo que es herencia vamos a implementarla, para este tutorial vamos a trabajar con el lenguaje de programación Java y el entorno de desarrollo NetBeans.

Primero implementaremos la superClase Operacion que es la que contiene los atributos y métodos a heredar

.public class Operacion { double n1; double n2; double res; char operacion; public Operacion(double n1, double n2, char operacion) { this.n1 = n1; this.n2 = n2; this.operacion = operacion; } public void mostrarResultado(){ System.out.println(this.n1+" "+this.operacion+" "+this.n2+" = "+this.res); } }

La herencia en Java (y en otros lenguajes de programación) se declara con la palabra reservada extends seguida de la clase de la cual deseamos heredar.

Para la clase Suma quedaría así:

public class Suma extends Operacion{ double suma; public Suma(double n1, double n2) { super(n1, n2, '+'); this.suma = n1 + n2; this.setRes(this.suma); } }

Resta:

public class Resta extends Operacion{ double resta; public Resta(double n1, double n2) { super(n1, n2, '-'); this.resta = n1 - n2; this.setRes(this.resta); } }

Multiplicación:

public class Multiplicacion extends Operacion{ double multi; public Multiplicacion(double n1, double n2) { super(n1, n2, '*'); this.multi = n1 * n2; this.setRes(this.multi); } }

y por último División:

public class Division extends Operacion{ double div = 0; public Division(double n1, double n2) { super(n1, n2, '/'); if(n2==0) System.out.println("No se puede dividir entre cero"); else this.div = n1 / n2; this.setRes(this.div); } }

Como podemos apreciar en las cuatro clases utilizamos la palabra reservada extends y seguida la clase de la cual se está heredando en nuestro caso Operacion, esto permite tener acceso a los métodos y atributos de esta clase, además hacemos uso del método super que hace una instancia de la superClase Operacion enviando como parámetros los números con los cuales se realizará la operación  y el símbolo de esta, luego ejecutamos la operación y enviamos el resultado a la superClase.

En nuestro programa principal instanciamos a cada una de las clases para realizar las operaciones y hacemos uso del método de la superClase Operacion para mostrar los resultados.

double n1 = 10; double n2 = 5; //suma Suma sum = new Suma(n1,n2); sum.mostrarResultado(); //resta Resta res = new Resta(n1,n2); res.mostrarResultado(); //multiplicacion Multiplicacion mul = new Multiplicacion(n1,n2); mul.mostrarResultado(); //division Division div = new Division(n1,n2); div.mostrarResultado();

Como resultado obtenemos el resultado de las operaciones y las podemos observar en la consola de salida de NetBeans, así que la herencia funciona correctamente.

Puedes encontrar el código de este ejemplo en mi repositorio de GitHub.