#!/usr/bin/python3 # -*- coding: utf-8 -*- """ Perceptrón para reconocer imágenes de cifras. """ import lectura import particion import tipored import ajuste import registro import torch import numpy from matplotlib import pyplot import error import random from torch import nn import analizar datos,datpru=lectura.leemat('mnist_uint8.mat','train_x','train_y','test_x','test_y') numvarent=len(datos[0])-10 numuestras=len(datos) #Son 784 píxels: no podemos analizar cada variable pixel por separado, pero podemos usar su distribucion frel,vals=lectura.grafica(list(range(numvarent)),datos) #Podemos analizar el conjunto de píxels pixels=datos[:,:-10][:].reshape((-1,1)) #lectura.estadistica(['pixels'],pixels) #o bien un par de variables mapeadas lectura.mapa(datos[:,:-10],[numpy.mean,numpy.std]) #los pixels son homógeneos entre sí: no los vamos a preprocesar #Son demasiadas variables para hacer estratificación tea,tsa,tev,tsv=particion.ajazar(datos,numuestras,...) tea=lectura.pasa2d(tea,28) tev=lectura.pasa2d(tev,28) tep,tsp=lectura.numpytorch(datpru,10) tep=lectura.pasa2d(tep,28).requires_grad_() #definir red red=tipored.perceptron(1,['3c3','3c3','3c3'],10,nn.LeakyReLU,nn.Sigmoid)#La entrada es 1 imagen, 3 convolutivas ocultas de 4 procesadores y ancho 3 las activaciones de las capas ocultas son LeakyReLU y la de la salida es Sigmoid red(tep) #).cuda(device) _,red,_=ajuste.ajustar(red,tea,tsa,tev,tsv,tep,tsp,algo=...,minibatch=...,kaj=...,numiter=...,topeval=...,regiter=registro.clasiter,regfin=registro.clasprueba,error=nn.BCELoss()) #Como los resultados son clases discretas, no entramos a los residuos numéricos. Se supone que la matriz de confusión ya nos informa #Analizar la red con muestra tan grande lleva mucho tiempo #Vemos un caso concreto print('\nEjemplo') quien=random.randrange(len(tsp)) caso=tep[quien] registro.imagen(caso.detach(),'Ejemplo',False) dice=red(tep[quien].unsqueeze(0)) print('Red dice',error.clases(dice)) #Las explicaciones se basan en remuestrear. En un espacio de tan alta dimensión lleva mucho tiempo