Matlab Kodunu Javaya Dönüştürmek İçin Yardım
-
Merhaba arkadaşlar. Bir arkadaşımın bitirme tezini yapmasına yardımcı oluyorum da hiç matlab bilmediğim için matlab kodunu anlayıp javaya dönüştürmem zor oluyor. Aşağıdaki kodu anlayıp yanına açıklama yazabilecek birileri var mı acaba? (Örneğin burada transpoze aldık. Burada iki matrisi çarpıp başka bir matrise attık gibi). Şimdiden teşekkürler.
%%%%parametreler%%%%%
mu1=0.2;
mu2=0.2;
a=3;
%%%%%%%%%%%
ng=9;
nn1=4;
nn2=3;
nn0=2;
iterasyon_s=100;
egitim_s=4;
%%%%ilk degerler%%%
agirlik_1=0.25*randn(nn1,ng+1);
agirlik_2=0.25*randn(nn2,nn1+1);
agirlik_o=0.25*randn(nn0,nn2+1);
%%%%%%%%%%%%%%%%%%%%%%%
egitim_kumesi_g=[0.9 0.9 0.9 0.1 0.9 0.1 0.1 0.9 0.1;
0.9 0.1 0.1 0.9 0.1 0.1 0.9 0.9 0.9;
0.9 0.9 0.1 0.1 0.9 0.1 0.1 0.9 0.1;
0.9 0.1 0.1 0.9 0.1 0.1 0.9 0.9 0.1];
egitim_kumesi_c=[1 0;
0 1;
1 0;
0 1];
for l=1:iterasyon_s
for k=1:egitim_s
giris_1=[egitim_kumesi_g(k,:)';1];
cikis=egitim_kumesi_c(k,:)';
v1=agirlik_1*giris_1;
y1=1./(1+exp((-1)*a*v1));
giris_2=[y1;1];
v2=agirlik_2*giris_2;
y2=1./(1+exp((-1)*a*v2));
giris_o=[y2;1];
vo=agirlik_o*giris_o;
yo=1./(1+exp((-1)*a*vo));
e=cikis-yo;
hata=0.5*e'*e;
hata_kon(k,1)=hata(:);
%fdrv_o=a*yo.*(1-yo);
%%%egitim cikis katmani%%%
trvo = a*yo.*(1-yo); %logsig hata fonksiyonunun cikis katmani icin turevi
yerel_grao=e.*trvo; %cikis katmani yerel gradienti
%%%egitim 2. gizli katman%%%
trv2 = a*y2.*(1-y2); %logsig hata fonksiyonunun 2. gizli katman icin turevi
indo = [agirlik_o(:,1:nn2)]; %indirgenmis agirlik matrisi
yerel_gra2 = indo'*yerel_grao.*trv2; %2. gizli katman yerel gradienti
%%%egitim 1. gizli katman%%%
trv1 = a*y1.*(1-y1); %logsig hata fonksiyonunun 1. gizli katman icin turevi
ind2 = [agirlik_2(:,1:nn1)]; %indirgenmis agirlik matrisi
yerel_gra1 = ind2'*yerel_gra2.*trv1; %1. gizli katman yerel gradienti
agirlik_o = agirlik_o+mu2.*yerel_grao*giris_o'; %cikis katmani parametresi olarak mu2 kullanildi
agirlik_2 = agirlik_2+mu2.*yerel_gra2*giris_2'; %2.gizli katman parametresi olarak mu2
agirlik_1 = agirlik_1+mu1.*yerel_gra1*giris_1'; %1.gizli katman parametresi olarak mu1
end%egitim
hata_top=0.25*sum(hata_kon');
hata_top_v(l,1)=hata_top(:);
hata_lim=0.01;
if hata_top<hata_lim
break;
end%if
end%iterasyon
plot(hata_top_v,'*')
%%%%%%test%%%%%%%
test_kumesi_g=[0.9 0.9 0.9 0.1 0.9 0.1 0.9 0.9 0.1];
tgiris_1=[test_kumesi_g(1,:)';1];
v1=agirlik_1*tgiris_1;
y1=1./(1+exp((-1)*a*v1));
giris_2=[y1;1];
v2=agirlik_2*giris_2;
y2=1./(1+exp((-1)*a*v2));
giris_o=[y2;1];
vo=agirlik_o*giris_o;
yot=1./(1+exp((-1)*a*vo))
-
hocam matlab kendisi direk kendi kodlarını C kodu olarak çevirebiliyor. C biliyorsan eğer ordan javaya geçirmek çok daha kolay olacaktır. bir kaç bişey haricinde değiştireceğin yer olmaz sanırım. tabiki class vs kullanacaksan iş biraz değişir.
http://www.mathworks.com/videos/generating-c-code-from-matlab-code-68964.html
Matlab demo videosu burda işine yarar umarım.
-
Çok sağ ol abi bunu bir deneyeyim bakalım bir şeyler çıkar belki
-
yukardakinden bişey çıkmazsa diye ben yine de açıklamalarını yazayım hocam
agirlik_1=0.25*randn(nn1,ng+1); %0.25,-0.25 arasında rastgele sayılarla [nn1,ng+1] boyutlu matris üretir. agirlik_2=0.25*randn(nn2,nn1+1);%bunlar da aynı şekilde agirlik_o=0.25*randn(nn0,nn2+1);% --------------------------- giris_1=[egitim_kumesi_g(k,:)';1];%egitim_kumesi_g matrisinin ilk satırını sutün olarak alır +1 eleman olarak sonuna 1 ekler. yani ilk satırda 9 eleman varsa 10. eleman 1 olur. cikis=egitim_kumesi_c(k,:)';%egitim_kumesi_c matrisininilk satırını sutün olarak alır v1=agirlik_1*giris_1;%iki matrisi çarpar y1=1./(1+exp((-1)*a*v1));%v1 matrisinin her elemanı icin bu işlem yapılır. sonuç matris olarak cikar giris_2=[y1;1];%y1 matrisine +1 eleman olarak 1'i ekler v2=agirlik_2*giris_2;%iki matrisi çarpar y2=1./(1+exp((-1)*a*v2));%v2 matrisinin her elemanı icin bu işlem yapılır. sonuç matris olarak cikar giris_o=[y2;1];%+1 eleman olarak 1'i ekler. vo=agirlik_o*giris_o;%matrisleri çarpar yo=1./(1+exp((-1)*a*vo));%vo matrisinin her elemanı icin bu işlem yapılır. sonuç matris olarak cikar e=cikis-yo;%matrisleri cikarir hata=0.5*(e'*e);%e matrisi ile transpozesini 0.5 ile çarpar hata_kon(k,1)=hata(:); -------------------------------
hocam gerisini çıkarabilirsin umarım.
.* , ./ , .\ matrislerde eleman elemana olan işlemler. matris çarpması değilde karşılıklı elemanları çarpıyosun bölme de aynı şekilde.
" ' " bu kesme işareti matrisin transpozesini alır.
birde matrislerde eleman sınırlaması gibi bişey ismini tam bilmiyorum şimdi onu çok kullanmış. yani mat(100,50) olsun.
mat(30:50,10:20) diye yazan şey mat matrisinin 30ile50. sutünları arasıyla 10ile20. satırları arasında kalan alandaki elemanların kaldığı matrisi alır. rakam yok sadece " : " varsa bütün satırları yada sutünları alır.
başkada yok sanırım. takıldığınız bir yer olursa açıklamaya çalışırım yine de.
-
Bu açıklama daha iyi oldu benim için. Teşekkür ederim çok işime yaradı.
-
Kodun çok büyük bir kısmını bitirdim, çoğu yeri anladım sağ olsun tuncaxxz çok yardımcı oldu ama son 4 farklı satır kaldı. Bunları bir türlü anlamadım. : operatorunu açıklayabilecek biri var mı?
Kalan satırlar:
hata_kon(k,1)=hata(:); %%hata ve hata_kon birer matris
indo = [agirlik_o(:,1:nn2)]; %%agirlik_o matris
ind2 = [agirlik_2(:,1:nn1)]
hata_top_v(l,1)=hata_top(:);
-
fortunate1357 bunu yazdı
Kodun çok büyük bir kısmını bitirdim, çoğu yeri anladım sağ olsun tuncaxxz çok yardımcı oldu ama son 4 farklı satır kaldı. Bunları bir türlü anlamadım. : operatorunu açıklayabilecek biri var mı?
Kalan satırlar:
hata_kon(k,1)=hata(:); %%hata ve hata_kon birer matris
indo = [agirlik_o(:,1:nn2)]; %%agirlik_o matris
ind2 = [agirlik_2(:,1:nn1)]
hata_top_v(l,1)=hata_top(:);
: matris veya dizi için tüm elemanları alır.
hata_kon(k,1)=hata(:); %burada hata'nın tüm elemanlarını hata_kon'a k adet satır ve 1 sütun olarak aktarmış.(hata'nın tüm elemanlarını k adet satır ve 1 adet sütun olarak hata_kon'a aktarmış)
indo = [agirlik_o(:,1:nn2)]; % burada ise agirlik_o'nun tüm satırlarını ve 1'den nn2'ye kadar olan sütunlarını indo'ya aktarmış.
ind2 = [agirlik_2(:,1:nn1)] % burada agirlik_2'nin tüm satırlarını ve 1'den nn1'e kadar olan sütunlarını ind2'ye aktarmış.
hata_top_v(l,1)=hata_top(:); % hata_top'un tüm elemanlarını l adet satır ve 1 adet sütun olarak hata_top_v'ye aktarmış
-
Çok sağ ol hocam beni büyük bir dertten kurtardın.