lunes, 25 de noviembre de 2019

Razones para iniciar una ONG o una Associación Civil

Actualmente en el mundo existen muchas ONGs que promueven la ayuda y la caridad por las zonas más pobres, no obstante, existe pobreza también en el primer mundo.
Un claro ejemplo se aprecia en Japón, donde algunas personas invierten mas de 12 horas diarias en la realización de una tarea especifica y con un sueldo que no llega a cubrir las necesidades básicas.

Las opciones de mercado desfavorecen al trabajador debido a la demanda. Además, las empresas ofrecen el pago por comisión y no por duración.
Esto a su vez, empeora el servicio y la calidad de vida. 
Por suerte hay personas que ayudan a estos trabajadores con alquileres muy económicos y ofrecen algunos bienes necesarios como luz, agua y comida de forma altruista.


Otra de las razones que influyen en la calidad de vida de los países más desarrollados, es el hacinamiento.
Conglomeración de gente ubicada en un epicentro muy poblado, con el objetivo de mostrar un empeoramiento del entorno, una disminución en la calidad de vida o situaciones de hambre y conflictos.

Actualmente hay mas de 7000 millones de personas en el mundo. Según la organización de control de natalidad 5.500 millones es el limite de humanos que puede albergar nuestro planeta. 
Varias organizaciones atacan este problema con demostraciones en el cambio climático, gases de efecto invernadero, falta de alimento, contaminación de los océanos, entre otras catástrofes.
Además se ve ridículo pensar que los países más desarrollados, son también los países menos favorecidos al estar en una supuesta sensación de abundancia.
La comparación con países tercermundistas, evidencian una falsa sensación de riqueza cuando en realidad, los anuncios enfatizan desmesuradamente la necesidad de la donación.

En definitiva, el dinero se dona, pero no retorna.

Que podemos hacer para remediar este problema?
En España, llevamos años intentando buscar soluciones sociales que ayuden a fomentar el empleo y reducir el paro.
Pero el sistema politico, no asegura una calidad de vida.
Cuando un ciudadano vota a un partido, el partido no puede efectuar una acción ejecutiva. Es el politico, el que elige un candidato que ejecute la acción y no el pueblo, el que decide al candidato y mucho menos la acción.
Solo cabe esperar un nuevo gobierno o cambiar la constitución.
Pero pienso que ese es un camino muy largo y cuando haya algun cambio, será por otro problema presente y no por una ejecución de tareas a realizar.

Llevamos siglos en un modelo de empobrecer al proletariado. 
El trabajo tiene que ser el camino que uno elige y no una obligación social. Somos mejores pensando, creando, imaginando e innovando. 
Podríamos aplicar ese potencial para disfrutar de nuestra libertad, mientras las maquinas producen y reciclan todo lo que necesitamos  

"Permitamos que las maquinas hagan todo el trabajo por nosotros. Sin fronteras ni limites."

La idea es crear infraestructuras automatizando todo proceso sin depender de ninguna ayuda externa. En definitiva crear modelos para Marte con los parámetros de la Tierra.

Se pretende llevar a cabo el desarrollo de tecnologia capaz de auto-abastecer a cualquier persona y asegurar una calidad de vida digna y escalable mediante el progreso.

Empezando por una aportación altruista personal y promoviendo el desempeño real de proyectos de auto-abastecimiento.
Además, al ser una Organización sin animo de lucro, no habría ningun problema para reincorporarse a una vida laboral con la ventaja de obtener alimentos sin necesidad de comprarlos, entre otros privilegios que irían surgiendo con el trabajo de todas las aportaciones.

Este modelo tiene un inconveniente al que muchos habréis de asumir.
Todo posible puesto de trabajo, será remplazado por maquinaria automatizada y con su posible mantenimiento también automatizado. Eso significa: Reducir los puestos de trabajo hasta la total aniquilación. No obstante, la crisis que pasen las empresas, podria ayudar a la comprar nuevos locales mas económicos y facilitar mercado de artesanías y otra clase de objetos como si de un juego de MMORPG se tratara.


Primera Etapa del proyecto:
Auto sustentar con alimentos, agua, electricidad, hogar, entre otros mediante el trabajo colectivo de todas las personas que busquen la estabilidad y el bienestar independientemente de su riqueza propiedad o su estado social actual.

La organización atiende a razones éticas por encima del beneficio monetario y pretende mejorar la vida de los integrantes que apoyen esta causa.

Así bien, la natalidad será justificada también por la aportación de proyectos y mejoras para la sociedad, comprendiendo así que el bebé deberá estar cubierto de toda posible necesidad antes de tenerlo. Respetando la colectividad junto con el deseo de engendrar un hijo.

En las etapas siguientes, los alimentos pueden ser trasladados automáticamente mediante drones a los miembros de esta organización. (proyecto a desarrollar)

Las porciones y bienes se distribuyen a cada miembro por igual. La organización entiende que el esfuerzo tiene que ser equilibrado y cada persona debe aportar su parte hasta cubrir con las necesidades ya cubiertas anteriormente como mínimo. 
Esta asociación también considera el cuidado de animales como parte de la convivencia colectiva y acogerá todo animal o mascota cuidando sus necesidades básicas (refugio, comida, bebida...) siempre que el propietario del animal, aporte mejoras para el sustento del animal.

Por ultimo, las labores dentro de esta comunidad tendrán un efecto directo sobre las personas que desarrollen cualquier tecnologia capaz de substituir la mano de obra actual por automatismos que permitan aumentar la calidad de vida de los integrantes.
Además premiará de forma directa proyectos activos de forma publica. Tales como: calles, casas, barrios, fabricas, fincas, cultivos, granjas, etc. Asignando nombres por el esfuerzo de la persona o personas que desarrollaron tal tecnologia.
Por ejemplo: Calle Manolo Lucas, Casa estilo Jaime Gonzalez, etc...

viernes, 18 de octubre de 2019

No entiendo nada

Estoy en una situación complicada. Por una parte, llevo viviendo toda la vida con frustración. Siempre que he sentido la motivación de crecer, desarrollarme profesionalmente y personalmente. Nunca he encontrado el modo de hacerlo con la metodologia "correcta".

Llevo unos años en Alemania y exijo mas responsabilidad de la que me dan, por la diferenciación clara de competencias dentro de la misma categoria. Realizando trabajos donde iniciados "alemanes", obtienen a corto plazo, trabajos del mismo nivel que los que yo he realizado después de 2 años..

Ya que mis superiores suelen exigirme perfeccionamiento y agilidad. Entreno duramente para conseguirlo. No obstante, los comentarios ofensivos junto con tareas recientemente adquiridas, me entorpecen en mi trabajo y mi concentración desciende drasticamente.

Que si hablan de mi, que vaya mas rápido, que lo hago todo mal, algun que otro insulto. Entre mucha hipocresia de por medio. jaja jiji y toma insulto que te llevas.

Por consiguiente he acabado rompiendo a llorar despues de mi jornada laboral, esperando tras la vaya del paso a nivel. Y todo por una conversación con mis compañeros.

Mis dos compañeros españoles me dicen:
-Deberías dar la mano a todos los trabajadores, no solo a los que tienes a tu lado. Perder 10 minutos para dar los buenos días. No cuesta nada y es tiempo que te quitas de jornada.
-En ese momento mi respuesta fue: Si claro a los 200, no? voy a estar perdiendo cada dia esos 10 minutos, cuando apenas me da tiempo para terminar todo lo que me piden los jefes.
-No. Solo a los que estan en este rectángulo (los trabajadores del departamento) y no vale con decir buenos días en general y ponerte a hacer tu trabajo.
-Pero a ver, si luego me dicen que vaya rápido y sin fallos, intento hacer todo lo que piden.
En mitad de la conversación uno de los jefes dice: ya es la hora de salir, venga rápido, vete!
Entonces mi compañera interrumpe al jefe diciendo: -un momento que le estoy diciendo algunas cosas importantes sobre dar la mano los buenos días.
Se dirige nuevamente a mi y me dice: el lunes te lo dije que parecías un sargento. Te lo dije en plan broma, pero tienes que tomarte tiempo, oye y si no puedes, no pasa nada. Ves que a mi me digan algo? Solo con dar la mano, ganas mucho...
- Pero a ver... lo mismo acaba de pasar, me dicen que vaya rápido, te acaban de interrumpir...
-Ya, y has visto que haya reaccionado?
-No, pero...
-Tienes que relajarte, oye y si no terminas la faena no pasa nada. Tu ves que yo vaya rápido cogiendo las cosas?
-Lo cierto es que no...

Después de esta conversación, me ha descolocado todos los esquemas.
Por una parte, mis compañeros estan mucho mas valorados que yo, no solo eso, sino que la persona que me dio este consejo, fue nombrada en la reunión pasada como el punto de referencia de mi sueldo que podria llegar a percibir. Dando a entender que soy problemático y por lo tanto en caso de ser contratado, percibiría un sueldo inferior.
Y en esa reunión solicité trabajos mas cualificados y un trato mas humano debido a que mi encargado me faltaba repetidamente el respeto.

Desde España, Alemania parece imponente.
La realidad es opuesta.


domingo, 8 de septiembre de 2019

Facilidades para tener éxito

A medida que pasa el tiempo, hay ofertas de trabajo en las que exigen una serie de cosas que son incomprensibles. Cuando me imagino los puestos cubiertos, pienso que hay personas muy bien preparadas y cubren ellos solos todos los puestos de trabajo.
Me imagino profesionales totalmente independientes con toda clase de talentos que van desde ser maestros del marketing, con alto nivel de idiomas extranjeros, experiencia en puestos similares, a desarrolladores natos de la mas revolucionaria tecnologia y que lo hacen en cuestión de muy poco tiempo.
Luego en noticias, resultan ser cientos o miles de trabajadores con un propósito común, con tareas muy simples y muy bien pagados, celebrando y alardeando de su trabajo como si fuese un éxito absoluto.
Que esta pasando aquí?
3000 personas para realizar un diseño durante varios meses y lo celebran como un éxito.
Empresas que muestran tecnologia del 1800 como algo revolucionario?

Y luego está el individuo independiente que se encarga de hacer todo ese trabajo el solo y no es ni reconocido ni valorado. No solo eso sino que obtiene poco merito y nadie parece apreciar todo ese esfuerzo.
Como el paleta que todo el mundo piensa que no sabe de nada, pero que te hace una casa en la que no te mueres de frió ni se te cae el techo después del granizo.

En cambio se dice: se requiere de ingeniero para...
Osea lo mismo que hace ese paleta.
Ah pero es que ese paleta no es ingeniero...
Ya pero bien que tienes casa, no?

Entonces vas, contratas a un ingeniero y te dice: aquí necesitamos un técnico en planos, aquí un diseñador de estructuras con inglés, para hablar con el proveedor, aquí el soldador para unir las piezas..
Y finalmente la firma de una persona responsable que ha dicho, a ver, esto esta bien, esto se tiene que volver a hacer... total otros 3 meses mas y finalmente tienes tu casa de 5 millones de Euros.

Resulta que el paleta, te daba un precio de 400 mil euros, pero tu has preferido ir a lo seguro.
Ya...

Claro es que ellos tienen estudios.
No a ver... ellos tienen libros y esos libros dicen lo mismo que el paleta hace.
Porque no nos engañemos, toda formula, es un proceso de observación, por lo tanto las formulas parten de un resultado real. Por eso el que tiene que calcular las fuerzas, usa determinado material.

Pero el paleta eso ya lo tiene sabido, el sabe que en las ventanas se tiene que poner un refuerzo con acero trenzado dentro de la viga, para que soporte determinado peso, y cuanto mayor peso, mayor refuerzo.

Y el ingeniero cogerá una plantilla y hará ver que ha hecho esos cálculos, te los enseñará y el papel que te ponga, lo tasará al notario y tendrás que amoquinar otros 300€ para validar ese trabajo.

Entonces, vamos a ver. 1 persona mal valorada respecto a la sociedad, por sus estudios? su experiencia? su trabajo?

Si en vez de Paleta fuese: Master Specialist in the Construction of Efficient Buildings
Y luego este diria, necesito 5 personas mas a mi cargo. Ahora si que ya lo peta. en la próxima empresa puede decir que era jefe de equipo con 5 personas a su cargo. No solo eso sino que ademas el se encargaba de mirar como los otros trabajaban.

Resulta que el paleta de antes, te decía que tardaria 5 meses en terminar. Ahora son 6 personas y se tardarán 5 meses también en terminar. Porque necesitan material que les tiene que llegar, o el trabajador que tienen no es lo suficientemente rápido o simplemente necesitan mas mano de obra.

Al final el cliente sigue las normativas, se ayuda del soporte de profesionales del sector y donde antes tenia que pagar a 1 ahora se suman otros 6.

Todos hablan bien, les gusta su trabajo y siguen las ordenes. Todo es muy mecánico.

Que pasa cuando tu eres un paleta de verdad?
Todo ese equipo te sobra, trabajas mucho mas y nadie te valora, incluso el propio cliente piensa que tu tiempo no vale ni la mitad del tiempo que ese jefe que tiene 5 personas a su cargo.

Que te queda entonces?
Seguir la hipocresia, hacerte valer como alguien importante sin implicarte realmente y valorar todo tu éxito junto con tus compañeros, ser una persona sociable que aplaude el trabajo de todos y se beneficie de ello.

En definitiva, un hipócrita de guante blanco.

Cuando te muestras superior, nadie te deja sobresalir.
Cuando muestras tus fortalezas agradeciendo a los demás su trabajo. Tu trabajo hablará por si mismo.
Cuanto mas finjas saber y menos hagas, mas cobrarás y menos estrés tendrás.

La sociedad es así. Todos se nutren del trabajo de la abeja para tener miel.

martes, 23 de julio de 2019

Descenso gradiente

import numpy as np #libreria de calculo numerico
import scipy as sc #extension de numpy
import matplotlib.pyplot as plt #visualizacion de datos

#funcion anonima de coste para vector de parametros
#func = lambda th: np.sin(1 / 2 * x ** 2 -1 / 4 * y ** 2 + 3) * np.cos(2 * x + 1 - np.e ** y)
#optimizacion de funciones
func = lambda th: np.sin(1 / 2 * th[0] ** 2 -1 / 4 * th[1] ** 2 + 3) * np.cos(2 * th[0] + 1 - np.e ** th[1]) #funcion anonima de coste para vector de parametros

#visualizar el parametro de la funcion: print(func([2,3]))
res = 100 #100 valores de resolucion
#vectores X e Y de -2 a 2 con 100 coordenadas
_X = np.linspace(-2, 2, res)
_Y = np.linspace(-2, 2, res)

_Z = np.zeros((res, res)) #matriz de elementos nulos de tamaño 100x100

for ix, x in enumerate(_X):
for iy, y in enumerate(_X):
_Z[iy, ix] = func([x,y]) #primero columnas, luego filas
plt.contour(_X, _Y, _Z, 100) #crear superficie diferencial desde arriba
plt.colorbar() #regla de profundidad con colores

Theta = np.random.rand(2) * 4 -2 #numero aleatorio de 2 a -2

_T = np.copy(Theta) #copia de Theta

h = 0.01 #incremento de diferenciacion
lr = 0.01 #ratio de aprendizaje

plt.plot(Theta[0], Theta[1], "o", c="white")


grad = np.zeros(2) #vector/array de 2 posiciones con valor '0'

for _ in range (10000): #bucle de intentos
#calcular la derivada parcial en el mapa
for it, th in enumerate(Theta):
_T = np.copy(Theta)
_T[it] = _T[it] + h #incremento añadido
deriv = (func(_T) - func(Theta)) / h #calcula la diferencia de vectores respecto al incremento
grad[it] = deriv #guarda la derivada parcial en un vector
Theta = Theta - lr * grad #aumenta el vector gradiante respecto el ratio de aprendizaje

# mirar numeros del vector en el mapa: print(func(Theta))

#metodo de diferencias minimas
if ( _ % 100 == 0): #cuando el resto de la division de 100 es 0, haz:
plt.plot(Theta[0], Theta[1], "o", c="red") #coloca el punto al azar en el mapa

plt.plot(Theta[0], Theta[1], "o", c="green") #coloca el punto en el mapa
plt.show() #visualizacion de la matriz

Engañar a el algoritmo de reconocimiento de imagen

import tensorflow as tf
import keras
import matplotlib.pyplot as plt
import numpy as np

from keras.applications.inception_v3 import InceptionV3, decode_predictions
from keras import backend as K

iv3 = InceptionV3() #tocho libreria

print(iv3.summary()) #resumen de la topologia inseptionv3

from keras.preprocessing import image

#cargar imagen en array y ajustar al objetivo de tamaño deseado
x = image.img_to_array(image.load_img("./Direccion_de_la_imagen/imagen.jpg", target_size=(299,299)))
print(x,shape)
#reescalar el rango de intensidades de la imagen de 255 a 1 y de 0 a -1
x /= 255 #dividir x por 255 para obtener rango de 0 y 1
x -= 0.5 #restar 0.5 para reducir el rango de 0 a -0,5 y de 1 a 0,5
x *= 2 #multiplicar por 2 para obtener el rango de -1 a 1

x = x.reshape([1,x.shape[0], x.shape[1], x.shape[2]])#añadir nueva dimension
#para visualizar: print(x.shape)

y = iv3.predict(x) #resultado de x

#para saber el tamaño del vector: print(y.shape)
#para saber que imagen predice el modelo: decode_predictions(y)


#____Ataques adversarios________
inp_layer = iv3.layer[0].input
out_layer = iv3.layer[-1].output

target_class = 951 #la clase objetivo es un limón

out_layer[0, target_class] #maximizar la clase de salida

grad = K.gradients(loss, inp_layer)[0]

#valores de entrada para la optimizacion de inclinacion: [entrada de capa, fase de aprendizaje],[inclinacion y valor de error]
optimize_gradient = K.function([inp_layer, K.learning_phase()],[grad, loss])

adv = np.copy(x) #copia de la imagen (variable X)

pert = 0.01 #perturbacion de la imagen

max_pert = x + 0.01 #limite superior
min_pert = x - 0.01 #limite inferior

cost = 0.0

while cost < 0.95:
gr = optimize_gradient([adv, 0]) #guarda el gradiante en gr optimizado
adv += gr #manipular pixeles en la copia original
adv = np.clip(adv, min_pert, max_pert) #limita los valores de las variables int
adv = np.clip(adv, -1, 1) #limita los valores de las variables float

print("coste objetivo(limon): ", cost) #solo con el GPU de tensorflow instalado

hacked = np.copy(adv)

#revertir el valor de adv [/2][+0.5][*255]
adv /= 2
adv += 0.5
adv *= 255

#visualiza la salida con la conversion de float a int
plt.imshow(adv[0].astype(np.uint8))
plt.show()

from PIL import image
im = image.formarray(adv[0].astype(np.uin8)) #convertir matriz integer a imagen
im.save("./Direccion_de_la_imagen/hacked.png") #guardar la nueva imagen

lunes, 22 de julio de 2019

Red neuronal Topology Learning Ratio dynamic TensorFlow

import numpy as np
import scipy as sc
import matplotlib.pyplot as plt

from sklearn.datasets import make_circles

#Crear Dataset

n = 500 #numero de registros en los datos
p = 2 #numero de caracteristicas que tienen los datos

#hacer un circulo con los datos y caracteristicas separado con un factor de 0.5 y 0.05 de ruido
X, Y = make_circles(n_samples = n, factor = 0.5, noise = 0.05)

Y = Y[:, np.newaxis]

#visualizar (X[...])... donde X => es el eje en el plano

#indice '0' en el vector Y visible en azul claro
plt.scatter(X[Y[:, 0]  == 0, 0], X[Y[:, 0] == 0, 1], c="skyblue") #p=1
#indice '1' en el vector Y visible en salmon
plt.scatter(X[Y[:, 0] == 1, 0], X[Y[:, 0] == 1, 1], c="salmon") #p=2
plt.axis("equal")
plt.show()


class neural_layer(): #crear una clase capa neuronal
#inicia un constructor de numero de conexiones, numero de neuronas y funcion de activacion
def __init__(self,n_conn, n_neur, act_f):
self.act_f = act_f #la act_f = al mismo parametro de act_f
self.b = np.random.rand(1, n_neur)*2 -1 #vector aleatorio con numero 0 como valor medio -1 a 1
self.b = np.random.rand(n_conn, n_neur)*2 -1 #matriz con numero de conexiones necesarias al numero de neuronas

#Funciones de activacion
sigm = (lambda x: 1/(1 + np.e**(-x)), #para un parametro de entrada x, sigm vale:
lambda x: x * (1 - x)) #derivada de sigm
_x = np.linspace(-5, 5, 100) #variable que crea 100 valores de forma lineal de entre -5 y 5

relu = lambda x: np.maximum(0,x) #valor maximo entre 0 y X


plt.plot(_x, sigm[0](_x)) #vista de la grafica con [0]= sigmoide con [1]= derivada



def create_nn(topology, act_f):
nn = []
for l, layer in enumerate(topology[:-1]):
nn.append(neural_layer(topology[l], topology[l+1], act_f))
return nn

topology = [p, 4, 8, 1] #numero de neuronas por capa

neural_net = create_nn(topology, sigm)

l2_cost = lambda Yp, Yr: (np.mean(Yp - Yr)**2), #error cuadratico medio de Yp = valor predicho e Yr = valor real
lambda Yp, Yr: (Yp - Yr)) #derivada del ECM

def train(neural_net, X, Y, l2_cost, lr=0.5, train=True): #funcion de entrenamiento / lr= ratio de aprendizaje
out =[(None, X)] # vectores de suma ponderada y valor de activacion

#Forward pass
for l, layer in enumerate (neural_net):
Z = out[-1][1] @ neural_net[1].W + neural_net[1].b #suma ponderada
a = neural_net[1].act_f[0](z) #activacion de la salida de la capa X
out.append((z,a))
print(l2cost[0](out[-1][1], Y)) #imprime el error

if train: #Si la variable Train es False nunca se ejecuta

#Backward pass (propagacion de error al inicio)
deltas = []
for l in reversed(range(0, len(neural_net)): #añades vectores del final hacia el principio
z = out[l+1][0]
a = out[l+1][1]

if l = len(neural_net) - 1:
#calcular delta ultima capa.
deltas.insert(0,l2_cost[1](a, Y) * neural_net[l].act_f[1](a))

else:
#calcular delta respecto a capa previa.
deltas.insert(0, deltas[0] @ _W.Transpose * neural_net[1].act_f[1](a))
_W = neural_net[l].W #guardado temporal

#Gradient descent
neural_net[l].b = neural_net[l].b - np.mean(deltas[0], axis=0, keepdims=True) * lr #algoritmo de bayas
neural_net[l].W = neural_net[l].W - output[1][1].Transpose @ deltas[0] * lr

return out[-1][1]


train(neural_net, X, Y, l2_cost, 0.5)




NN_exe.py

import time
from IPython.display import clear_output
neural_n = create_nn(topology, sigm)

loss = []
for l in range(2500):
#Entrenamiento de la red neuronal:
pY = train(neural_n, X, Y, l2_cost, lr=0.05)

if i % 25 == 0;
loss.append(l2_cost[0](pY, Y))
res = 50 #resolucion de la pantalla
_x0 = np.linspace(-1.5, 1.5, res)
_x1 = np.linspace(-1.5, 1.5, res)
_Y = np.zeros((res, res))
for l0, x0 in enumerate(_x0):
for l1, x1 in enumerate(_x1):
_Y[l0, l1] = train(neural_n, np.array([[x0, x1]]), Y, l2_cost, train = False)[0][0]
plt.pcolormesh(_x0, _x1, _Y, cmap= "coolware")
plt.axis("equal")
plt.scatter[X[Y[:,0] == 0, 0], X[Y[:,0] == 0, 1], c="skyblue")
plt.scatter[X[Y[:,0] == 1, 0], X[Y[:,0] == 1, 1], c="salmon")

clear_output(wait=True)
plt.show()
plt.plot(range(len(loss)), loss)
plt.show()
time.sleep(0.5)

domingo, 21 de julio de 2019

Ejercicio de regresion lineal

import numpy as np
import scipy as sc
import matplotlib.pyplot as pit
from sklearn.datasets import load_boston

#cargar la libreria
boston = load_boston()
print(boston.DESCR)

X = np.array(boston.data[:,5]) # coger todas las filas de la columna 5
Y = np.array(boston.target)
#np.array convierte datos en matriz

plt.scatter(X,Y, alpha=0.3) #cargar grafica "alpha = transparencia"


#Formula de Minimos Cuadrados Ordinarios
#W=((X^{t}X)^-1)X^{t}Y

X = np.array([np.ones(506),X]).T #colocamos una columna de 1

# formula minimos cuadrados
#inversa de (X transpuesta Multiplicada por X)* Transpuesta de X * Y
W = np.linalg.inv(X.Transpose @ X) @ X.Transpose @ Y

plt.plot([4,9],[W[0]+W[1]*4,W[0]+W[1]*9],c="red") #linea de regresion lineal
plt.show() #visualizar grafica en eje de coordenadas

Python IA, librerias: Tensorflow, Keras y Sklearn

from matlotlib import animation
from IPython.core.display import display, HTML

import tensorflow as tf

#Puntos de entrada de grafos
iX = tf.placeholder('float', shape=[None, X.shape[1]])
iY = tf.placeholder('float', shape=[None])

nn = [2, 16, 8, 1] #Numero de neuronas por capa
lr = 0.01 #Ratio de aprendizaje del optimizador.

#Capa1
W1 = tf.Variable(tf.random_normal([nn[0], nn[1]]), name = 'Weights_1')
b1 = tf.Variable(tf.random_normal([nn[1]]), name='bias_1')

l1 = tf.nn.relu(tf.add(tf.matmul(iX, W1), b1))

#Capa2
W2 = tf.Variable(tf.random_normal([nn[1], nn[2]]), name = 'Weights_2')
b2 = tf.Variable(tf.random_normal([nn[2]]), name='bias_2')

l2 = tf.nn.relu(tf.add(tf.matmul(l1, W2), b2))

#Capa3
W3 = tf.Variable(tf.random_normal([nn[2], nn[3]]), name = 'Weights_3')
b3 = tf.Variable(tf.random_normal([nn[3]]), name='bias_3')


#Vector de prediccion Y
pY = tf.nn.sigmoid(tf.add(tf.matmul(l2, W3), b3))[:,0]

#Evaluacion de las predicciones
loss = tf.losses.mean_squared_error(pY, iY)

#Creamos el optimizador que entrenará la red neuronal
optimizer = tf.train.GradientDescentOptimizer(learning_rate=lr).minimize(loss)

n_steps = 1000 #Numero de pasos para entrenar la red neuronal

with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for step in range(n_steps):
#variables optimizer, loss y pY nuevamente cargadas con:
#la matriz de entrada y el vector de salida
_, _loss, _pY = sess.run([optimizer, loss, pY], feed_dict={iX:X,iY:Y})
ifstep % 25 == 0:
#Calculo de precision entre el vector real y las predicciones
acc = np.mean(np.round(_pY) == Y)
print('Paso', step, ' /', n_steps, 'error del Vector cuadratico medio: ', loss, 'precision: ', acc)



# input X INPUT X
# Matmul XW1
# Suma XW1 + b1 CAPA DENSA (X)
# RELU f(XW1 + b1)
# Matmul L1W1 CAPA DENSA (C1)
# SUMA L1W2 + B2
# RELU f(L1W2 + B2) CAPA DENSA (C2)
# MATMUL L2W3
# SUMA L2W3 +B3 CAPA DENSA (C3)
# ...

#========================================================

# ___TensorFlow con keras___ nivel avanzado (Arquitectura Deeplearning)

import tensorflow.keras as kr

lr = 0,01 #ratio de aprendizaje
nn = [2, 16, 8, 1] #Neuronas por capa

#Estructura del modelo
model = kr.Sequential()

#Capa 1
model.add(kr.layer.Dense(nn[1], activacion='relu')) #agregar capa con funcion de activacion relu

#Capa 2
model.add(kr.layer.Dense(nn[2], activacion='relu')) #agregar capa con funcion de activacion relu

#Capa 3
model.add(kr.layer.Dense(nn[3], activacion='sigmoid')) #agregar capa con funcion de activacion sigmoide

#Compilar el modelo
model.compile(loss='mse', optimizer = kr.optimizers.SGD(lr=lr), metrics['acc']) #compilar el model con el vector de optimizacion deseado y la visualizacion de precision

#entrenar modelo
model.fit(X, Y, epochs=250) #Datos de entrada X y datos de salida Y numero max de epocas 250


#==========================================================

# ___sklearn___  Redes neuronales de capa a modelo

import sklearn as sk
import sklearn.neural_network

lr = 0.01 #ration de aprendizaje
nn = [2, 16, 8, 1] #numero de neuronas por capa

#Objeto del modelo
model = sk.neural_network.MLPRegressor(...) #se crea el objeto del modelo

#Entrenamiento al modelo
model.fit(X,Y) #se crea el modelo de entrenamiento

#Se hacen predicciones
model.predict(Xp) #se realizan predicciones

___________________________________________________________

# ___sklearn___  Redes neuronales de capa a modelo

import sklearn as sk
import sklearn.neural_network

lr = 0.01 #ration de aprendizaje
nn = [2, 16, 8, 1] #numero de neuronas por capa

#Objeto del modelo

#tipo de optimizador, ratio inicial de aprendizaje, numero de neuronas para cada capa oculta, detallado, numero de iteracciones a entrenar
model = sk.neural_network.MLPRegressor(solver='sgd',
learning_rate_init=lr,
hidden_layer_sizes=nn[1:],
verbose =True,
n_iter_no_change = 1000)

#Entrenamiento al modelo
model.fit(X,Y) #se crea el modelo de entrenamiento






domingo, 16 de junio de 2019

Limitaciones de la automatizacion industrial

La industria 4.0 (teóricamente tan avanzada) esta estancada en el siglo 19.
Los métodos de programación así como los programas usados en la codificación de PLCs se han estancado en un sistema demasiado básico para la época.
Esto no deberia ser un problema, pero lo cierto es que resulta mucho mas cómodo el uso de programas escritos de alto nivel que los de bajo nivel.
Y a cómodo no me refiero a fácil. Hay una gran diferencia entre hacer un programa en lenguaje de alto nivel y uno de bajo nivel.
El de bajo nivel vas a tener que preocuparte de casi todo. paso a paso, eso significa mucho trabajo repetitivo. Ademas los PLCs funcionan en modo cascada, por lo que aumenta el numero de instrucciones. Y el reaprovechamiento de partes de programa se desprecia.
Básicamente código espagueti.
Si fuera solo eso, aun estaria dentro de lo pasable. Los PIC antiguos, usaban un sistema de movimiento de bytes que se solia ver como:
Main:
        movlw   0x00
        movwf   TRISB
Loop:
        movlw    0x01
        movwf    PORTB
        movlw    0x00
        movwf    PORTB

De esta manera se lograba decir que el puerto B se encontrara apagado y que parpadease un LED con bucle infinito a velocidad de Clock.

Este es un sistema muy básico, que para lenguajes de alto nivel se traduce a casi el mismo numero de lineas. Por ejemplo:
void setup() {
  PORTB = 0x00
}
void loop() {
     PORTB = 0x01;
     PORTB = 0x00;
}

Se obvia el movimiento con la instrucción de un '='

En Los programas de PLC funcionan paso por paso moviendo y guardando, como se hacia antiguamente con los PIC.
Además, los PLCs no son tan seguros a nivel de programación.
Con que empieces a jugar con las teclas muy rápido, puedes llegar a generar un salto de paso en el programa y necesitar un reset.
Así que tampoco es tan robusto electrónicamente, como se da a entender.

Pero parte de todo el problema está en el entorno de desarrollo. Donde un conjunto de instrucciones básicas, puede suponer necesitar una pantalla de cine. La razón es que el entorno de programación se define en conjunto de bloques con un orden en vertical. Y las variables o valores, se colocan en los laterales de cada bloque.

Para los programas condicionales, no es tan desagradable, pero cuando quieres conseguir un resultado transformado en otro valor, se vuelve extremadamente molesto.
La razón es que en un lenguaje de alto nivel, usaríamos:
Word = Str(DInt)

mientras que en Step7 eso es igual a:
mover valor del byte 0 a conjunto de bytes "doble palabra"
(4 bytes) ED0 -> EB1 ... 3
Convertir la variable Dint (4bytes) a Real
+(4 bytes) -> ED4 -> EB4 ... 7
Convertir la variable Real a Word
+ (2 bytes) -> ED8 -> EB8 ... 11
MW10 = Word y desechar los EB8 y EB9
Ocupando 10 bytes en la conversion + 2 bytes de residuo y sin poder volver a reutilizar esas posiciones de memoria.
Por lo visto de memoria va sobrada, pero visualmente estos 5 pasos en el programa se traducen a una pagina DIN-A4 impresa por ambas caras.

El problema de una programación así, no es que sea difícil, es que resulta incomoda y aburrida.
Se pierde mucho tiempo y además es difícil encontrar un posible error sin comprobar físicamente.

Actualmente cualquier pagina web maneja 10 veces mas datos que los manejados en un PLC. En cambio, los programadores de PLCs, desde que empiezan a trabajar suelen estar mejor remunerados.

En mi opinion, es una tecnologia de bajo rango intelectual muy bien remunerada.




martes, 4 de junio de 2019

Regresión Lineal

Método de mínimos cuadrados:

Épocas |   X   |   Y   |   X * Y  |   X^2  |
1          |  12  | 400 |   4800   |   144 |
2          |  10  | 390 |   3900   |   100 |
3          |  40  |1200|  48000  |  1600 |
4          |  50  |1900|  95000  |  2500 |
5          |  30  | 950 |  28500  |   900 |

Suma:  | 142  |4840|  180200 |  5244 |

La regresión lineal, consiste en generar una recta que determine la predicción de la tabla a nuevos valores.

 y = mx + b

m = la pendiente
b = Termino independiente
x = variable de entrada
y = valor de salida resultante

m= (n*(Exy)-(Ex)(Ey))/(n*(Ex^2)-(Ex)^2)
b= ((Ey)*(Ex^2)-(Ex)*(Exy)) / (n*(Ex^2)-(Ex)^2)

n = numero de épocas
E = Sumatoria

Para calcular la pendiente, una vez obtenido la época de cada resultado y almacenado en la base de datos, se aplica la formula, que despejando las variables se obtiene que:

m = (5*(180200)-(142)*(4840))/(5*(5244)-(142)^2)
m = 35.29062087186262

b = ((4840)*(5244)-(142)*(180200)) / (5*(5244)-(142)^2)
b = -34.25363276089828

y = 35.29062087186262 * x + -34.25363276089828


El resultado de la predicción (y) en una pendiente lineal, dependerá del valor de entrada (x).
Obteniendo el resultado de la pendiente en todo el rango de valores.

Dimensionalidad, Clasificador, Tensorflow, Matriz de confusión

Dimensionalidad

Imaginando el radio de una circunferencia en 2D. 
El vector de 1, 1, equivale al radio 1 de la circunferencia.
Dejando un circulo de A = pi*r². Con el incrento de dimensiones, el valor resultante de las esquinas tiende a 0.
Observese la tabla de dimensiones.


















Tensorflow
En una red neuronal los datos se ordenan de izquierda a derecha creando una red de pruebas.
Las Entradas: se definen como el numero de dimensiones. X
Los Pesos: son las conexiones entre los nodos. W
Las salidas: Vectores resultantes Y
Los objetivos: Vectores objetivos en el aprendizaje supervisado
Función de activación: Activa la operación en función de la entrada
Error: Calcula la precision de la salida Y respecto a los objetivos T.

En el aprendizaje computacional es necesario clasificar los datos según sus valores.

En un array de datos, implementa un algoritmo secuencial de aprendizaje.
Los arrays estan compuestos por entrada de datos y objetivos.

Los valores de entrada son los valores reales y los de salida, pretenden ser los objetivos.

El Clasificador se compone de 3 grupos:
Entrenamiento o Capacitación: reajusta los parámetros en el aprendizaje
Pruebas: Verifica los resultados en un aprendizaje supervisado
Validación: Detecta el error de dimensionalidad según el vector y el numero de dimensiones.

El sistema evalúa el array de datos con valores objetivo y comprueba el resultado.
El resultado de la Validación es guardado y se procede a evaluar nuevamente los datos.
Comprueba y compara el resultado con la anterior validación y guarda el mejor resultado como valido.

Estos tres grupos separan el array de datos y lo evalúan con condicionales simplificados.

El conjunto de datos se analiza en 3 bloques:


La maldición de la dimensionalidad
A medida que aumentan las dimensiones, los algoritmos requieren de mayor rango de procesamiento.
Eso dificulta el aprendizaje. Para solucionarlo, es necesario optimizarlo evitando la sobre saturación de datos.

Tanto para pocas o muchas dimensiones, el conjunto de datos tienen un porcentaje de influencia según el numero de dimensiones.
A consecuencia, se obtiene mayor precision.
Para pocas dimensiones: 50% entrenamiento 25% Pruebas y 25% Validación.
Para mayor rango de dimensiones: 60% 20% 20%.
Estos porcentajes son aproximados y variaran según la complejidad de la red neuronal.
De este modo, se minimiza el proceso de entrenamiento y maximiza el rendimiento libre de ruido excesivo.

En un aprendizaje automático, se hace una simulación en los datos obtenidos.
El algoritmo selecciona según el porcentaje dado en los bloques Entrenamiento (E) Prueba (P) y Validación (V) los diferentes datos obtenidos en la salida y los compara con los datos objetivo.

En un Array de datos, los valores se almacenan en el conjunto porcentual.
En una distribución 50,25,25 tendríamos:
    E,E,P,P,V,E,E,E, V  = ejemplo1
                E,E,P,V,E,E,E, P,V = ejemplo2
                V,E,E,P,V,E,E,P,P   = ejemplo3
    …                          = ejemplo n
Puede ser aleatorio no repetitivo u ordenado según si es un problema de regression o de clasificación.
                E,E,E,E,E,P,P,V,V = ejemplo1
                V,E,E,E,E,E,P,P,V= ejemplo2
                V,V,E,E,E,E,P,P,P = ejemplo3
     …                       = ejemplo n

Estos 3 grupos se ordenan al azar y se busca por aprendizaje supervisado el conjunto de menor error. Guardando el mas favorable en validación y desechando el conjunto no favorable u obteniendo un 0 en el ejemplo “n” de validación..
Estos array de datos quedarían en binario y sumados según su numero de aciertos o (V) validación
Cada ejemplo es enumerado y distribuido en una matriz de Clases.

La Matriz de Confusion
Es una matriz cuadrada que engloban todas las validaciones de ejemplos y permite visualizar el rendimiento del algoritmo para problemas de clasificación. No sirve para problemas de regression porque los resultados son continuos.
Esta matiz se compone de una clasificación de validación respecto a los objetivos.
Y la diagonal de arriba (VP) a abajo (VN) determina los valores correctos del algoritmo.
Obteniendo un resultado porcentual de la exactitud o precision, tasa de error y sensibilidad.

Matriz(i,j) C1          C2           C3 
  C1           5             1             0                                           
  C2           1             4             1                            
  C3           2             0             4                           


                          1             0            Algoritmo       
           1             VP          FP
           0             FN          VN
Validacion          

VP = Verdadero Positivo             (La entrada y Algoritmo COINCIDEN como Correcto)
FP = Falso Positivo                          (El Algoritmo NO coincide con la entrada)
FN = Falso Negativo                       (La entrada NO coincide con el Algoritmo)
VN = Verdadero Negativo          (La entrada y el Algoritmo COINCIDEN como Falso)

Dependiendo de los valores de cada cuadrante de la matriz(I,j) obtendra un porcentaje de aprendizaje y deteccion de errores.

Exactitud = (VP + FP)/total
Sensibilidad = VP / (VP + FN)
Especifico = VN / (VN + FP)
Precisión = VP / (VP + FP)

lunes, 22 de abril de 2019

resumen de estos últimos 7 años

Buff, estoy cansado de esto, llevo muchísimo tiempo dejando curriculums a empresas y no recibo respuesta, he probado por internet, personalmente e incluso logrando casi que me engañen trabajando por una miseria y sin nada que demuestre que estoy trabajando.
Quiero trabajar de lo mio. Quiero hacer aquello que me gusta y que me valoren por ello.
Entonces, te encontré.
Me encanta Japón, el idioma y su gente, no he ido nunca, pero me interesa. Empecé a ir a un intercambio de idiomas para socializarme y conocer gente que admiro.
Aqui encontré muchas personas que marcaron un antes y un despues.
Una de ellas, hizo que me derritiera.
En medio de una conversación, ella se encontraba apurada, discutiendo en japonés con otro. Yo en aquel entonces no entendía nada, pero el tono de la conversación era tenso.
Entonces ella me acarició la rodilla de un modo que me dejó inconsciente. Sexualmente  me atrajo solo con ese gesto. Esa chica desataba algo en mi que deseaba estar con ella. A tal punto que empecé a salir, gastar de ahorros y mi visión de trabajo se centro únicamente en poder estar con ella y sentir que no estoy trabajando en otro trabajo no cualificado, sino que a pesar de no gustarme, mi único objetivo era disfrutar y compartir con ella todo. Me volví obsesivo, ella me daba mas de lo que podia entrar en mi mente. Fue con ella y solo ella, la que me hizo sentir la muerte como un placer. Era tanta la adrenalina, que me volví un desesperado, solo quería esa droga que ella me daba. Pero ella se fue como todas las anteriores. Yo era otro chico en su listado de la compra. A pesar de ello, en ese tiempo, logré trabajar mas, que cuando buscaba trabajo desesperadament.
Con ella creí que lo espiritual era realmente importante. En una ocasión subimos a Montserrat y recé junto a ella para conseguir un trabajo. Y al dia siguiente me llamaron una ETT.
Yo que solia evitar esas cosas por la influencia de mi antiguo instituto, donde se valoraba tanto la lectura como la misa. Y como no me gustaba leer y en misa daban galleta. Pues la galleta ganaba la partida, a pesar de ser un pecador aparentando ser religioso.

Cansado de trabajos que no me sustentaban ni para mantener un mínimo aun viviendo en casa de mis padres, fui a la oficina de empleo durante bastante tiempo, aprendiendo a buscar empleo, ya que mis anteriores métodos no surgieron efecto.
Mejoré mi curriculum y me registré en mas portales, pero seguia sin aparecer nada.
La presión de mis padres por encontrar trabajo, el hecho de no tener experiencia y ver que en las ofertas se centraban en experiencia e idiomas. Me limitaba a aceptar una vida miserable, en la que pedir en la calle, parecía tener mas sentido.

Pero entonces recibí una llamada en mi casa. Preguntaron por mi. Yo pensé que se trataba de una empresa, cuando me dieron el telefono y me dijeron que era para mi.
Era la oficina de empleo, llamándome sobre una oferta.
La única oferta medianamente seria que llegaba en años. Un sueldo estable!
Solo habia una pequeña pega... Tenia que ir a Alemania. Pero en ese momento, me imaginé otra cosa. Alemania, uaauuu!! La calidad alemana, siempre ha sido la mejor del mundo. No solo es genial, sino que encima, voy a destacar en mi carrera profesional! En ese momento, me vi capaz de todo! Yo que apenas podia chapurrear algunas palabras en inglés y que recibí ayudas familiares para aprender ese idioma. Cosa que odiaba a muerte ya que por culpa del inglés, no podia demostrar mi formación. Nadie de recursos humanos se podia creer que pudiese saber de material técnico, a pesar de que mucha información está documentada en inglés. Programación, electronica, mecànica... Parecía que no eran estudios validos sin el inglés.
Pero sentí que era un buen momento para demostrar que no tienen nada que ver los idiomas con los conocimientos técnicos y que encima resaltaría por mucho de lo que conozco.
Ya que siempre he considerado que mi formación en Sarriá fué realmente productiva.

Sin mas preámbulos, acepté esa oferta. Mandé un correo que me tiré como 4 horas o mas y con ayuda escribiendo y rectificando cosas irrelevantes. Para dar la mejor impresión posible. Curiosamente lo que al final acabó por darme esa oportunidad, fue una entrevista en la que mostré algo fuera de mi, pero que salió natural.
le dije a la entrevistadora:
-Tengo la certeza que nos volveremos a ver.
Después de eso (salio mi yo despistado y me fui al ascensor feliz de la vida, sin mi mochila)
Así que me di cuenta que me faltaba algo y volví a la sala y le dije a la entrevistadora mientras estaba con otra entrevista:
-Lo ves! ya sabia que nos volveríamos a ver. Se me olvidó la mochila...
Creo que ese momento, fue decisivo en mi contratación. Una entrevistadora que llevaba 6 horas entrevistando sin parar, creo que logré su atención, tal que se estaba riendo a carcajada suelta. Así que es un poco frustrante que eso que no tiene nada que ver con el trabajo, logre ser un factor decisivo.
Pero funcionó. 

Después de eso, aquella entrevistadora hizo lo imposible por encontrarme un puesto de trabajo en Alemania, a tal punto que el actual se canceló y no se olvidó de mi para proponerme una alternativa.
Como el proceso, se alargó mas de lo normal, decidí hacer un curso ocupacional de soldadura, ya que durante un periodo de 2 meses no recibí respuesta de Alemania.
Y de golpe, me dijeron que tenia que hacer un curso intensivo de Alemán.

Asi que valorando mis pasadas experiencias, esta vez le di mas peso a los idiomas. Debido a que no podia compaginar el reciente curso de soldadura por arco, con las clases de alemán, por falta de tiempo.
Tomé la decisión mas acertada, ya que mis amigos siempre me decían que habían expectativas laborales en ese curso, pero de todos los que hicieron el curso de soldadura conmigo, nadie informó de haber encontrado un trabajo que no realizaran ya, anteriormente.

Entonces, pasados 3 meses de alemán, se presentaron los representantes de la agencia con los billetes de avión. Dando por hecho que nos íbamos a Alemania si o si.
Fue una situación tensa, porque a pesar de estar haciendo el curso y saber lo de la oferta laboral en Alemania, no me hacia a la idea de que esto me sucediera, pensé que seria como otro curso mas, en el que terminas el curso y sigues buscando trabajo. Estaba demasiado habituado a encontrar ese tipo de formación carente de mercado. 

Pero fui a Alemania e incluso en el vuelo, seguia sin creérmelo, después en el tren, seguia sin creérmelo y cuando llegamos. Nada era lo que en mi mente se había formado de Alemania.
Nunca había estado en un albergue, ni tampoco estaba habituado a viajar en avión. Antes de eso, solo había viajado a Londres durante 3 días y esa era toda mi experiencia fuera de la peninsula.
Salí completamente de mi zona de confort.
Luego me di cuenta de que no fue por mi formación, sino mas bien por las condiciones laborales.
Pero acostumbrado al trabajo duro, me resultó mas de lo mismo. Lo único que sin poder comunicarme y con mucha discriminación ètnica.

Al principio me sentia integrado en el equipo, pensaba que haríamos domotica, instalaciones inteligentes y muchas cosas interesantes. Luego me di cuenta que eso no lo hacia mi empresa y las técnicas de construcción eran mucho mas primitivas. Incluso me encasillaron en fontaneria, pero luego con una reunión con mi gestor, me ubicaron en la zona eléctrica. Pero agradezco haber aprendido también de eso. 

Realmente la calidad alemana empezaba a preocuparme, gasto innecesario de cable, secciones pequeñas y mucho cable de toma de tierra desperdiciado que no conectaba a ninguna parte, cosas realmente sin sentido técnico. Tal era eso, que decidí proponerle una mejora en la empresa al jefe, pasados solo 3 meses en esa empresa, un método mejor para el tendido eléctrico. Pero que acabo en agua de borrajas.

A medida que pasaban los meses, la situación se volvía cada vez mas tensa, algunos compañeros eran un cancer. Insultos, faltas de respecto, discriminación...
Los trabajos duros los solia hacer yo sin medidas de seguridad, ya que en ocasiones se les olvidaba poner gafas y cascos en la furgoneta y gran parte de esos equipos de protección no hacían su propósito debido a toda la fatiga acumulada.,
Se trabajaba a contrareloj y con altas dificultades por comer medianamente bien. Tal era el caso que tenia que comprar el martes la compra de toda la semana. Ya que en ocasiones no habia una segunda compra. En días calurosos era habitual encontrar gusanos en la comida por falta de una nevera o una compra mas reciente.
Mas tarde, un compañero del proyecto, se volvió literalmente loco y a raiz de eso, y mostrando un excel a mi gestor, de las horas que realizaba versus las horas semanales y que en una ocasión la empresa se negó a dar un informe de horas. Pude hacer un cambio, a otra empresa.

En esta nueva empresa, se exige un nivel mucho mas profundo de alemán, pero siento que progreso favorablemente. 

Ya han pasado 3 años desde que vine a Alemania, me presenté a mi primera prueba de examen oficial, con ciertas dificultades de comprensión y expresión, que claramente decrecieron una nota que podria ser mucho mas elevada de no ser por las limitaciones del idioma. Pero que estuvieron ajustadas a un buen resultado. Cada vez queda menos para una prueba final.

Por otra parte mi mundo se ha vuelto muy solitario, las falsas expectativas, el hecho de socializarme poco y las experiencias pasadas, marcaron una barrera en mi principal idea de Alemania y el idioma.
La frustración ha sido casi el pan de cada dia, donde preguntas que para un alemán serian: Geschenke punkt, para mi era: No entiendo nada.
Además que mas tarde aprendía el significado de ese problema y descubría que gran parte de mi formación como hobby ya sobrepasaba por mucho todos los conocimientos que adquiria (o mas bien, repasaba) en la formación académica alemana.

Dado este cumulo de falta de ilusión y estres con frustración. Me vi obligado a realizar un sueño.
Viajar a Japón. Fue un viaje que pasó de un sueño a una necesidad.
En japón recuperé la ilusión que por el mundo. Aunque he de reconocer que estaba literalmente cagado, ya que este seria el único viaje completamente solo y con uso de pasaporte. Pero Japón me enseñó un mundo mas allá de unas casitas de madera. Tal era el punto, que sentia que Alemania, me estaba haciendo retroceder en todo. 
Hay un mundo que aun sigue creciendo mientras yo estoy aquí intentando sustentar mi vida.
Quiero luchar por vivir con lo que me hace feliz, aprender, innovar, desarrollar, crecer, aportar. Aunque de momento todo es soledad y trabajo, lucho para cambiar todo eso.

sábado, 23 de marzo de 2019

Aprendizaje Computacional

4 tipos de aprendizaje IA.
-Aprendizaje supervisado:
  ->Objetivos o respuestas correctas
  ->Aprende de ejemplares
-Aprendizaje no supervisado:
  ->Identifica similitudes
 ->Estimación de densidad
-Aprendizaje de refuerzo:
  ->Cuando la respuesta es incorrecta, prueba diferentes posibilidades
  ->Puntua la respuesta (no sugiere mejoras)
-Aprendizaje evolutivo:
  ->Puntua la solución actual

Para la resolución de una tabla de valores de 2 dimensiones:
La aproximación de un valor fuera del rango de la tabla, se tiene que encontrar por la interpolación de una función, se considera como un problema de regresión en la estadística.
Tambien puede considerarse un valor, fuera de rango como una detección de novedad.
La determinación de la tabla se separa por dimensiones, clases y limites de decisión.
  -Dimensiones: Magnitudes que determinan un tamaño en el espacio.
  -Clases: Conjunto de instancias comunes en una magnitud.
  -Limites de decisión: Tamaño máximo del espacio en las dimensiones.



La economia de la pobreza

En algún momento, es inevitable plantearse el desnivel económico mundial.
El precio de la vida oscila. En las ciudades mas pequeñas, el precio de la vivienda es menor, pero no hay tantas ventajas en cuanto a cercanía del mercado o diversión.
Cuando las distancias son largas, se puede apreciar un desequilibrio enorme en el coste de bienes y servicios. Pero no siempre es así. Por ejemplo en Alemania, las ciudades mas caras, son las mas pobladas, pero alrededor los países muestran variaciones financieras muy importantes.
Debido al coste de la vida respecto al valor de la moneda. Por ejemplo Polonia o Republicà Checa tienen una desventaja financiera frente a Alemania y de igual modo Alemania lo tiene con Suiza.
Lo mismo que pasa con España frente a otros países.
Pero a la otra punta del mundo, tenemos la Gran Asia, con mayor riqueza y me atrevería a decir incluso mayor tecnologia que en todo el resto de países. No obstante, su riqueza ahora empieza a prosperar financialmente, en cambio, el mercado Europeo se va a la deriva. No es de extrañar, ya que, la tendencia, es generar fabricas en Asia y viviendas en Europa. Pero Los asiáticos llevan décadas evitando suelo Europeo con rascacielos que desafían las leyes de la física y generando mega ciudades super pobladas. No solo eso, la tecnologia de impresión 3D ya es un hecho en la construcción y otras areas. Europa se queda atrás, lo único que ha hecho generar riqueza, ha sido el hundimiento de la población con tasas, multas injustificadas, modas sin sentido, division de poderes y conflictos sociales.
En la época de la esclavitud ya se planteó el reto de superar a una maquina, hoy en dia desde hace ya décadas, las maquinas son muy superiores a cualquier persona en una tarea física o de calculo.
Europa, pretende sustentar la población con producción pero sin fabricas. Busca la esclavitud y el servicio de impuestos y tasas para suplir la carencia de la industria.
Europa sigue teniendo industria, pero no es industria de calidad. Solo hay que ver las tasas que cobran cuando pides un servicio de China. Y por mucho que digan que la calidad china no vale nada. Hoy en dia no es así. La calidad Asiática esta muy por encima de la prestigiosa calidad Alemana. Desde la fabricación a la entrega, China tiene una industria competitiva que desafia la estabilidad financiera de Alemania. Es un hecho que un producto fabricado en China tarda pocos días en todo el proceso de fabricación y envio al país de entrega. En cambio del país residente a la residencia del solicitante o el centro de recogida mas cercano tiene una duración mayor, con impuestos y mal servicio. Así lo he vivido todo este tiempo en mis compras a Asia. Europa tiene que hacerse cargo de todo este problema. No puede seguir mandando fuera la industria y vivir del campo. Hasta para plantar hortalizas se usan maquinas de control numérico. Entonces, solo queda el sector del servicio. Donde un café ya es común encontrarlo superior a 3€.
"Es el camarero el que viene al bar a trabajar y el bar el que da trabajo al camarero"
Por otra parte Europa tiene una población muy patriarcal, se sienten de la nación y buscan siempre una estabilidad social, en la que no se dan cuenta de que el sistema, genera esclavos librepensadores del mundo cerrado que les rodea. El habitante medio, desea la estabilidad, cobrar 45 mil €uros anuales, una casa un coche e hijos. Hoy en dia, para llegar a eso, es necesario robar.
El sistema financiero, genera riqueza de donde no la hay y eso crea desigualdad en la moneda en periodos de tiempo. Donde desfavorece al ahorrador y favorece las grandes riquezas. Quien tenia mucho, ahora tiene mas y quien no tenia tanto, ha tenido que ahorrar para obtener mas dinero, pero nunca termina de ahorrar. Eso es debido a las fluctuaciones del mercado. Pero si solo fuera eso, no habría ningun problema, en corregirlo. El problema viene cuando la población ha sido educada para creer que aquello que poseen es lo mejor que hay y nadie puede mejorar su calidad. No necesitan más, por que son los mejores o eso piensan. Es mas, su educación es tan limitada que se contentan con sacar buena nota. El sistema no quiere gente inteligente. Quieren personas fáciles de manipular, que hagan lo que tengan que hacer para poder tener ese sueño tan esperado, prosperar y ser reconocido por la sociedad, como una persona que ha sabido aprovechar su tiempo. Nadie se preocupa por el pobre o el que profundiza en un pensamiento critico. El sistema está creado para que no puedas ir a contracorriente.
Pero el sistema, se va a la deriva. Posiblemente esa persona critica, sea la única en toda la población que ve que el camino, tiene fin.
Los tiempos cambian, el rico no es quien tiene mas dinero, sino el que puede prosperar con poco y ganar mas por cada paso. La inversión se ha vuelto cada vez mas importante. No es suficiente ser bueno, tienes que ser el mejor y no solo de algo, sino de todo lo que puedas abarcar.
Los futuros pobres serán los despreocupados mal habituados a la riqueza.