Adaptive Neuro-Fuzzy Inference System (ANFIS)


Adaptive Neuro-Fuzzy Inference System (ANFIS) merupakan jaringan syaraf adaptif yang berbasis pada sistem kesimpulan fuzzy (Fuzzy Inference System). Dengan menggunakan metode pembelajaran hybrid, ANFIS dapat memetakan nilai masukan menuju nilai keluaran berdasarkan pada pengetahuan yang dilatihkan dalam bentuk aturan fuzzy.

Berikut merupakan contoh aplikasi pemrograman MATLAB untuk mengklasifikasi citra daun ke dalam 4 buah kelas (A, B, C, dan D) menggunakan algoritma ANFIS. Pada contoh ini digunakan 40 citra daun yang terdiri dari 10 citra pada masing-masing kelas. Citra tersebut dibagi menjadi dua bagian yaitu sebanyak 28 citra untuk data pelatihan dan 12 citra untuk data pengujian. Contoh citra daun yang digunakan ditunjukkan pada gambar di bawah ini:

Langkah-langkah pemrograman-nya adalah sebagai berikut:
1. Mempersiapkan citra latih untuk proses pelatihan

2. Melakukan pelatihan algoritma ANFIS untuk mengklasifikasikan citra daun. Ciri yang digunakan untuk membedakan antara kelas daun yang satu dengan yang lain adalah ciri morfologi dan ciri tekstur. Ciri morfologi yang digunakan yaitu metric dan eccentricity. Sedangkan ciri tekstur yang digunakan yaitu contrast, correlation, energy, dan homogeneity. Keenam ciri tersebut digunakan sebagai masukan dalam algoritma ANFIS untuk mengklasifikasikan citra daun ke dalam 4 buah kelas. Koding program pelatihan adalah sebagai berikut:

% Adi Pamungkas, S.Si, M.Si
% Website: https://pemrogramanmatlab.com/
% Email  : pemrogramanmatlab@gmail.com

clc; clear; close all; warning off all;

% menetapkan nama folder pelatihan
image_folder = 'data latih';
% membaca nama file yang berekstensi .tif
filenames = dir(fullfile(image_folder, '*.tif'));
% membaca jumlah file
total_images = numel(filenames);
% menginisialisasi variabel feature
feature = zeros(total_images,6);
% untuk semua file yang dibaca
for n = 1:total_images
    % menggabungkan lokasi folder dengan nama file
    full_name = fullfile(image_folder, filenames(n).name);
    % membaca file citra
    I = imread(full_name);
    % melakukan segmentasi citra menggunakan metode otsu thresholding
    Img = imbinarize(I);    % untuk matlab dengan versi sebelum tahun 2016 gunakan perintah >> Img = im2bw(I,graythresh(I));
    % melakukan komplemen citra
    Img = imcomplement(Img);
    % operasi morfologi filling holes untuk menutup lubang pada objek
    Img = imfill(Img,'holes');
    % operasi morfologi area opening untuk menghilangkan noise
    Img = bwareaopen(Img,1000);
    % ekstraksi ciri morfologi
    stats = regionprops(Img,'All');
    area = stats.Area;
    perimeter = stats.Perimeter;
    metric = 4*pi*area/(perimeter^2);
    eccentricity = stats.Eccentricity;
    % ekstraksi ciri tekstur
    GLCM = graycomatrix(I,'Offset',[0 1; -1 1; -1 0; -1 -1]);
    stats = graycoprops(GLCM,{'contrast','correlation','energy','homogeneity'});
    contrast = mean(stats.Contrast);
    correlation = mean(stats.Correlation);
    energy = mean(stats.Energy);
    homogeneity = mean(stats.Homogeneity);
    % mengisi variabel feature dengan nilai hasil ekstraksi ciri
    feature(n,1) = metric;
    feature(n,2) = eccentricity;
    feature(n,3) = contrast;
    feature(n,4) = correlation;
    feature(n,5) = energy;
    feature(n,6) = homogeneity;
end

% menetapkan target pelatihan
target = zeros(total_images,1);
target(1:7,:) = 1;      % Daun A
target(8:14,:) = 2;     % Daun B
target(15:21,:) = 3;    % Daun C
target(22:28,:) = 4;    % Daun D
% menyusun data pelatihan
trnData = [feature,target];
% menetapkan parameter pelatihan anfis
numMFs = 2;
mfType = 'trapmf';
error_goal = 1e-6;
epoch = 20;
trnOpt(1) = epoch;
trnOpt(2) = error_goal;
% membangun arsitektur anfis
fismat = genfis1(trnData,numMFs,mfType);
% pelatihan anfis
[trnfismat,rmse] = anfis(trnData, fismat, trnOpt);
% plot membership function
[x,mf] = plotmf(trnfismat,'input',1);
subplot(2,3,1), plot(x,mf)
xlabel('input 1 (trapmf)')
[x,mf] = plotmf(trnfismat,'input',2);
subplot(2,3,2), plot(x,mf)
xlabel('input 2 (trapmf)')
[x,mf] = plotmf(trnfismat,'input',3);
subplot(2,3,3), plot(x,mf)
xlabel('input 3 (trapmf)')
[x,mf] = plotmf(trnfismat,'input',4);
subplot(2,3,4), plot(x,mf)
xlabel('input 4 (trapmf)')
[x,mf] = plotmf(trnfismat,'input',5);
subplot(2,3,5), plot(x,mf)
xlabel('input 5 (trapmf)')
[x,mf] = plotmf(trnfismat,'input',6);
subplot(2,3,6), plot(x,mf)
xlabel('input 6 (trapmf)')
% menyimpan variabel trnfismat hasil pelatihan anfis
writefis(trnfismat,'trnfismat');
% membaca nilai keluaran hasil pelatihan
output = round(evalfis(trnData(:,1:6), trnfismat));
% menghitung akurasi pelatihan
error = numel(find(output~=target));
akurasi_pelatihan = (numel(output)-error)/(numel(output))*100

Pada proses pelatihan tersebut digunakan dua buah membership function pada masing-masing input dengan tipe trapezoidal-shaped membership function (trapmf) yang ditunjukkkan pada gambar berikut:

Hasil keluaran dari proses pelatihan ditunjukkan pada tabel di bawah ini:

Pada tabel di atas tampak bahwa seluruh citra diklasifikasikan sesuai dengan target kelas yang sebenarnya. Sehingga diperoleh akurasi hasil proses pelatihan adalah sebesar 28/28*100 = 100%

3. Mempersiapkan citra uji untuk proses pengujian

4. Melakukan pengujian algoritma ANFIS menggunakan fuzzy inference system yang dihasilkan dari proses pelatihan. Koding program untuk proses pengujian adalah:

% Adi Pamungkas, S.Si, M.Si
% Website: https://pemrogramanmatlab.com/
% Email  : pemrogramanmatlab@gmail.com

clc; clear; close all; warning off all;

% membaca variabel variabel trnfismat hasil pelatihan anfis
trnfismat = readfis('trnfismat');
% menetapkan nama folder pengujian
image_folder = 'data uji';
% membaca nama file yang berekstensi .tif
filenames = dir(fullfile(image_folder, '*.tif'));
% membaca jumlah file
total_images = numel(filenames);
% menginisialisasi variabel feature
feature = zeros(total_images,6);
% untuk semua file yang dibaca
for n = 1:total_images
    % menggabungkan lokasi folder dengan nama file
    full_name = fullfile(image_folder, filenames(n).name);
    % membaca file citra
    I = imread(full_name);
    % melakukan segmentasi citra menggunakan metode otsu thresholding
    Img = imbinarize(I);    % untuk matlab dengan versi sebelum tahun 2016 gunakan perintah >> Img = im2bw(I,graythresh(I));
    % melakukan komplemen citra
    Img = imcomplement(Img);
    % operasi morfologi filling holes untuk menutup lubang pada objek
    Img = imfill(Img,'holes');
    % operasi morfologi area opening untuk menghilangkan noise
    Img = bwareaopen(Img,1000);
    % ekstraksi ciri morfologi
    stats = regionprops(Img,'All');
    area = stats.Area;
    perimeter = stats.Perimeter;
    metric = 4*pi*area/(perimeter^2);
    eccentricity = stats.Eccentricity;
    % ekstraksi ciri tekstur
    GLCM = graycomatrix(I,'Offset',[0 1; -1 1; -1 0; -1 -1]);
    stats = graycoprops(GLCM,{'contrast','correlation','energy','homogeneity'});
    contrast = mean(stats.Contrast);
    correlation = mean(stats.Correlation);
    energy = mean(stats.Energy);
    homogeneity = mean(stats.Homogeneity);
    % mengisi variabel feature dengan nilai hasil ekstraksi ciri
    feature(n,1) = metric;
    feature(n,2) = eccentricity;
    feature(n,3) = contrast;
    feature(n,4) = correlation;
    feature(n,5) = energy;
    feature(n,6) = homogeneity;
end

% menetapkan target pengujian
target = zeros(total_images,1);
target(1:3,:) = 1;
target(4:6,:) = 2;
target(7:9,:) = 3;
target(10:12,:) = 4;
% menyusun data pengujian
testData = feature;
% membaca nilai keluaran hasil pengujian
output = round(evalfis(testData, trnfismat));
% menghitung akurasi pengujian
error = numel(find(output~=target));
akurasi_pengujian = (numel(output)-error)/(numel(output))*100

Hasil yang diperoleh pada proses pengujian ditunjukkan pada tabel berikut:

Berdasarkan tabel di atas, dari 12 citra yang diujikan, terdapat tiga citra yang diklasifikasikan tidak sesuai dengan target kelas daun sebenarnya. Sehingga akurasi yang dihasilkan pada proses pengujian adalah sebesar 9/12*100 = 75%. Hasil ini menunjukkan bahwa algoritma ANFIS cukup baik digunakan untuk mengklasifikasikan daun berdasarkan ciri morfologi dan ciri tekstur.

5. Membuat tampilan Graphical User Interface (GUI)

% Adi Pamungkas, S.Si, M.Si
% Website: https://pemrogramanmatlab.com/
% Email  : pemrogramanmatlab@gmail.com

function varargout = Klasifikasi_daun_anfis(varargin)
% KLASIFIKASI_DAUN_ANFIS MATLAB code for Klasifikasi_daun_anfis.fig
%      KLASIFIKASI_DAUN_ANFIS, by itself, creates a new KLASIFIKASI_DAUN_ANFIS or raises the existing
%      singleton*.
%
%      H = KLASIFIKASI_DAUN_ANFIS returns the handle to a new KLASIFIKASI_DAUN_ANFIS or the handle to
%      the existing singleton*.
%
%      KLASIFIKASI_DAUN_ANFIS('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in KLASIFIKASI_DAUN_ANFIS.M with the given input arguments.
%
%      KLASIFIKASI_DAUN_ANFIS('Property','Value',...) creates a new KLASIFIKASI_DAUN_ANFIS or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before Klasifikasi_daun_anfis_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to Klasifikasi_daun_anfis_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help Klasifikasi_daun_anfis

% Last Modified by GUIDE v2.5 01-Aug-2019 09:51:53

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
    'gui_Singleton',  gui_Singleton, ...
    'gui_OpeningFcn', @Klasifikasi_daun_anfis_OpeningFcn, ...
    'gui_OutputFcn',  @Klasifikasi_daun_anfis_OutputFcn, ...
    'gui_LayoutFcn',  [] , ...
    'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before Klasifikasi_daun_anfis is made visible.
function Klasifikasi_daun_anfis_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to Klasifikasi_daun_anfis (see VARARGIN)

% Choose default command line output for Klasifikasi_daun_anfis
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);
movegui(hObject,'center');
warning off all;

% UIWAIT makes Klasifikasi_daun_anfis wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = Klasifikasi_daun_anfis_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;


% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% menampilkan menu browse file
[nama_file,nama_path] = uigetfile({'*.tif'});
% jika ada file yang dipilih maka akan menjalankan perintah di bawah ini
if ~isequal(nama_file,0)
    % membaca file citra
    I = imread(fullfile(nama_path,nama_file));
    % menampilkan citra pada axes
    axes(handles.axes1)
    imshow(I)
    title('Citra Asli');
    % menampilkan nama file citra pada edit text
    set(handles.edit1,'String',nama_file)
    % menyimpan variabel I pada lokasi handles agar dapat dipanggil oleh
    % pushbutton yang lain
    handles.I = I;
    guidata(hObject,handles)
else
    % jika tidak ada file yang dipilih maka akan kembali
    return
end


% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% memanggil variabel I yang ada di lokasi handles
I = handles.I;
% melakukan segmentasi citra menggunakan metode otsu thresholding
Img = imbinarize(I);    % untuk matlab dengan versi sebelum tahun 2016 gunakan perintah >> Img = im2bw(I,graythresh(I));
% melakukan komplemen citra
Img = imcomplement(Img);
% operasi morfologi filling holes untuk menutup lubang pada objek
Img = imfill(Img,'holes');
% operasi morfologi area opening untuk menghilangkan noise
Img = bwareaopen(Img,1000);
% ekstraksi ciri morfologi
stats = regionprops(Img,'All');
area = stats.Area;
perimeter = stats.Perimeter;
metric = 4*pi*area/(perimeter^2);
eccentricity = stats.Eccentricity;
% ekstraksi ciri tekstur
GLCM = graycomatrix(I,'Offset',[0 1; -1 1; -1 0; -1 -1]);
stats = graycoprops(GLCM,{'contrast','correlation','energy','homogeneity'});
contrast = mean(stats.Contrast);
correlation = mean(stats.Correlation);
energy = mean(stats.Energy);
homogeneity = mean(stats.Homogeneity);
% menyusun data pengujian
testData = [metric,eccentricity,contrast,correlation,energy,homogeneity];
% membaca variabel variabel trnfismat hasil pelatihan anfis
trnfismat = readfis('trnfismat.fis');
% membaca nilai keluaran hasil pengujian
output = round(evalfis(testData, trnfismat));
% menampilkan citra hasil segmentasi pada axes
axes(handles.axes2)
imshow(Img)
title('Citra Hasil Segmentasi');
% mengubah nilai keluaran menjadi kelas keluaran
if output == 1
    kelas = 'Daun A';
elseif output == 2
    kelas = 'Daun B';
elseif output == 3
    kelas = 'Daun C';
elseif output == 4
    kelas = 'Daun D';
end
% menampilkan kelas keluaran pada edit text
set(handles.edit2,'String',kelas)

% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% mereset tampilan gui
axes(handles.axes1)
cla reset;
set(gca,'XTick',[]);
set(gca,'YTick',[]);

axes(handles.axes2)
cla reset;
set(gca,'XTick',[]);
set(gca,'YTick',[]);

set(handles.edit1,'String','');

function edit1_Callback(hObject, eventdata, handles)
% hObject    handle to edit1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit1 as text
%        str2double(get(hObject,'String')) returns contents of edit1 as a double


% --- Executes during object creation, after setting all properties.
function edit1_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit2_Callback(hObject, eventdata, handles)
% hObject    handle to edit2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit2 as text
%        str2double(get(hObject,'String')) returns contents of edit2 as a double


% --- Executes during object creation, after setting all properties.
function edit2_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end

>> Hasil klasifikasi untuk daun A

>> Hasil klasifikasi untuk daun B

>> Hasil klasifikasi untuk daun C

>> Hasil klasifikasi untuk daun D

File source code lengkap beserta citra daun pada pemrograman di atas dapat diperoleh melalui halaman berikut ini: Source Code

  1. mas, kalo training anfis menggunakan citra berwarna gimana mas?

  2. Mas Adi, itu nanti outputnya berupa apa mas ? Apa tabel hasil klasifikasinya tercetak di layar ? Thx

  3. Mas Adi, saya udh coba jalankan file percobaan.m nya, tapi yg keluar cuma akurasinya aja.. Tabel hasil klasifikasinya ga ada. Bagaimana cara melihat klasifikasi masing-masingnya cocok atau engga. Thx

  4. Mas Adi, saya sudah training data, hasil akurasinya 90% tapi pas pengujian hasilnya cuma 35%. Itu kenapa begitu ya mas ? Lalu saya punya 5 kelas target di training dan pengujian, tapi pas di jalankan pengujiannya ada feature yg masuk ke kelas 6 padahal saya deklarasikan 5 kelas saja. Solusinya gimana ya mas? Thx

  5. Mas Adi saya mau tanya, saya punya data training sebanyak 281 dan data uji sebanyak 20. Untuk data ujinya apa mesti merupakan bagian dari data training ? Atau data ujinya bisa berbeda dari data training ? Karena jika data uji merupakan bagian data training, hasil pengujiannya 100% tapi kalo data ujinya berbeda dari data training, hasil pengujiannya hanya 40%.

  6. sesuai dengan materi di atas, pengujian menggunakan data training menghasilkan akurasi pelatihan
    pengujian menggunakan data testing (data di luar data training) menghasilkan akurasi pengujian

  7. mas adi untuk citra berwarna segmentasi citranya pake yg mana? mohon bantuannya dengan menyantumkan linknya ya mas. terima kasih

  8. rini jayanti

    Assalamualaikum
    mau tanya kalau untuk sinyal suaranya menggunakan metode anfis gimana ya?

  9. rini jayanti

    mas adi tanya lagi
    parameter apa aja yang diperlukan untuk metode anfis?

  10. mas, biasanya output dari metode ANFIS berupa apa ?

  11. Mas, mau tanya. Kalau ingin menampilkan hasil masing-masing dari ciri’nya bagaimana ya? jadinya nanti hasilnya dalam bentuk tabel tapi berisi hasil numerik dari keenam feature dari setiap gambar? Jadi tidak perlu melalui tahap training dan testing anfis, makasih

  12. Mas, mau tanya lagi. Saya sudah mencoba dan keluarannya kenapa ada hasil negatifnya ya? dan kenapa hasilnya sangat jauh dari angka kelas yang telah ditentukan? Jadi misalnya seharusnya outputnya 3 tetapi saya malah mendapatkan output -2. Mungkin ada solusi, mas, untuk memperbaiki masalah ini? makasih

  13. mas mau nanya yang ini pake metode pembelajaran yg backpropagation atau yg hybrid?

  14. mas ada referensi buat prediksi saham dengan anfis, belum ada .. dan bagaimana saya melihat hasil prediksinya .. agak bingung nyusun programnya .. terimakasih

  15. Pak, cara mengetahui data output yang prosesnya menggunakan toolbox matlab gmna ya pak? saya sudah pakai out=evalfis([matriks colom],fis), tapi cuma dapat 1 output aja. Prosesnya satu-satu. Sedangkan data saya ada 480 data. Bagaimana cara mengeluarkan semua output tanpa proses satu-satu itu yaa pak? Apa ada cara mengeluarkan semua output sekaligus? Terima kasih pak

    • Maaf pak, saya sudah dapat jawaban pertanyaan saya di atas. Saya mau tanya lagi pak, apakah bisa data output haail training itu berupa data kategori? Dengan catatan, kategori ditentukan sendiri. Terima kaaih pak

    • tidak bisa, nilai keluaran harus berupa angka
      angka tsb kemudian dikonversi sendiri secara manual ke dalam kelas kategori

    • pada materi di atas, nilai output dihasilkan dalam jumlah banyak sekaligus, tidak satu per satu
      bisa dipelajari kembali

    • Baik pak. Terima kasih. Selanjutnya, ada yang mau saya tanyakan lagi pak. Saya memiliki 3 input yg kesemuanya berupa kategorik. Jadi, ketiga input itu saya notasikan dengan angka 0,1, 2, atau 3. Lalu, bagaimana cara menentukan membership function itu pak? Apakah langsung ditentukan sendiri berdasarkan kategori masing-masing input? Terima kasih sebelumnya pak.

    • Membership function ditentukan secara trial and error atau dicoba2

    • Baik pak. Terima kaaih banyak pak

    • Pak, maaf, saya mau tanya lagi. Kalau outputnya ada yang negatif dengan memakai tipe fungsi keanggotaan trimf, linear dan pakai metode optimasi hybrid, itu ada masalah dengan datanya atau gmna ya pak? Tp jika pakai trimf, constant, hybrid ataupun linear, outputnya positif semua. Terima kasih pak.

    • Tidak ada masalah dengan datanya
      Dicari saja fungsi keanggotaan yg menghasilkan output positif

  16. Baik. Terima kasih banyak pak

    • Pak, maaf saya mau bertanya lagi. Apakah anfis model sugeno pasti hanya menghasilkan 1 output? Dan adakah link untuk bisa membaca model struktur anfis pak? Terutama tentang pemetaannya. Terima kasih banyak pak

    • Output tidak selalu 1
      Utk menampilkan struktur anfis bisa mengetik di command window anfisedit kemudian import fis

    • Maaf pak, maksud saya, output di gambar struktur model anfis. Untuk kasus saya, ada 12 output setelah rule yang kemudian memetakan ke 1 titik output, sehingga hanya ada 1 output.

    • untuk melihat gambar struktur model anfis bisa mengetik anfisedit pada command windows

  17. Assalamu’alaikum mas, saya mau nanya apa perbedaan parameter konstan dan linear pada anfis toolbox di matlab? Dan apakah bisa melihat output masing2 layernya mas? Terima masih

  18. assalamualaikum mas, apakah coding anfis sama kalau untuk memprediksi cuaca?

  19. saya mau nanya lagi mas, kalau untuk inputan datanya bisa ndak lebih dari 1 jenis variabel kalau di anfis?

  20. mas adi kalo gambarnya, sudah di edit, bagaimana kalo gambarnya, jpeg dan berwarna, dan agar memenuhi ke anfis ini di proses apa dulu?

  21. maksudnya gambarnya belum di edit seperti di atas^

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: