tutorial neural network learning example code and matlab neural-network

learning - neural network toolbox matlab download



Error de red neuronal de Matlab: el tamaƱo de la entrada 1 no coincide con net.inputs{1}.size (1)

Tengo una matriz de 90 × 50 que contiene los datos de mi tren. cada fila contiene funciones extraídas de las imágenes de entrada de dígitos (se han leído 90 imágenes, 10 imágenes por cada dígito). Las primeras 10 filas se extraen de 10 imágenes del dígito 1 , las 10 se extraen de 10 imágenes del dígito 2 , y así sucesivamente, por lo tanto, el size(dataset,1) = 90

La parte de redes neuronales parte de mi código se muestra a continuación:

T=zeros(1,90); for i=1:90 T(i)=ceil(i/10); end setdemorandstream(491218382); net=fitnet(20); [net,tr]=train(net,datasetNormalized'',T);

datasetNormalized es mi conjunto de datos normalizado en el intervalo [0 1]. T es el objetivo de la red. Lo que quiero hacer ahora es obtener una nueva imagen de un dígito, convirtiéndolo en un vector de 1 × 50 (m_normalizado en este caso) y adivinar con la ayuda de mi red capacitada qué dígito es. Usé el siguiente código pero genera errores:

[a,b]=max(sim(net,m_normalized)); disp(b); msgbox([''digit is: '' num2str(b)],''Digit recognized'',''help'');

El mensaje de error se lee así:

Error using network/sim (line 130) Input 1 size does not match net.inputs{1}.size. Error in Neural (line 92) [a,b]=max(sim(net,m_normalized));

¿Tiene alguna idea de cómo puedo obtener un resultado del guión que me muestra qué dígito fue la imagen de entrada? Por cierto, el código de script completo está aquí para referencia adicional:

clc clear close all numOfPhotos = 90; imgRows = 100; imgCols = 50; X = zeros(numOfPhotos, (imgRows * imgCols) / 100); %% Resize Images % myresize(imgRows,imgCols); % read train images datasetIndex = 0; for i = 1:numOfPhotos/10 for j = 1:numOfPhotos/9 datasetIndex = datasetIndex+1; im = imread([''resized_train_numbers/' num2str(i) '' ('' num2str(j) '').jpg'']); im = im2bw(im, graythresh(im)); c = 1; for g = 1:imgRows/10 for e = 1:imgCols/10 s = sum(sum(im((g*10-9 : g*10),(e*10-9 : e*10)))); X(datasetIndex, c) = s; c = c+1; end end end end datasetNormalized = zeros(numOfPhotos, imgRows*imgCols/100); %% Normalize dataset contents minDataset = min(min(X)); maxDataset = max(max(X)); for i = 1:numOfPhotos for j = 1:imgRows*imgCols/100 datasetNormalized(i, j) = (X(i, j) - minDataset) / (maxDataset - minDataset); end end %%Neural network part T = zeros(1, 90); for i = 1:90 T(i) = ceil(i/10); end setdemorandstream(491218382); net = fitnet(20); [net, tr]=train(net, datasetNormalized'', T); % Read input image for recognition newImg = imread(''plate_1/1.jpg''); newImg = imresize(newImg, [imgRows imgCols]); newImg = im2bw(newImg, graythresh(newImg)); scrsz = get(0, ''ScreenSize''); figure(''Position'', [1 1 scrsz(3)/3 scrsz(4)/2]), imshow(newImg); m = zeros(1, imgRows*imgCols/100); c = 1; for g = 1:imgRows/10 for e = 1:imgCols/10 s = sum(sum(newImg((g*10-9 : g*10), (e*10-9 : e*10)))); m(c) = s; c = c+1; end end %Normalize m contents m_normalized = zeros(1, imgRows*imgCols/100); for i = 1:imgRows*imgCols/100 m_normalized(i) = (m(i)-min(m)) / (max(m)-min(m)); end [a,b] = max(sim(net, m_normalized)); disp(b); msgbox([''digit is: '' num2str(b)], ''Digit recognized'', ''help'');


tamaño de las entradas utilizadas para el entrenamiento de las redes neuronales y las entradas utilizadas para simular la red después del entrenamiento tienen que coincidir. En la pregunta anterior, la entrada fue una matriz de 50x90. Cada columna representa un dígito. Hay un resultado correspondiente para cada columna. entonces el resultado de la simulación (salida) se asigna a una variable (b) y luego se visualiza. El código que generó el error anterior fue así:
b=sim(net,m_normalized);
Como m_normalized es una entrada, tiene que coincidir con las columnas utilizadas para entrenar la red. Digamos que es una de las columnas. entonces tenemos que transponerlo para hacer un vector de 50x1 para que coincida con la forma de entrenamiento 50x90:
b=sim(net,m_normalized'');
arregla el error