These steps can be run after open the Java Project file
Open File menu and select Project Structure option
![Jepretan Layar 2024-01-07 pukul 23 36 08](https://private-user-images.githubusercontent.com/49669018/294771835-88ecf6a0-a010-45a5-b51d-36d009134cdf.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTg0MjA4NjIsIm5iZiI6MTcxODQyMDU2MiwicGF0aCI6Ii80OTY2OTAxOC8yOTQ3NzE4MzUtODhlY2Y2YTAtYTAxMC00NWE1LWI1MWQtMzZkMDA5MTM0Y2RmLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA2MTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNjE1VDAzMDI0MlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWEwYzBjZGQwYzlhZjg0YzViYmQxNmU4NjUyNmY5YzM1ZDJlZDRmMzk5ODMyZjExZDdmNzVhNDg3YWZjYjA1MzYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.TKjRKKgUS1rtmoTASkikwaNlLkgtRWmwxnOhxy4i07w)
When Project Structure is open, select Modules in Project Settings section
![Jepretan Layar 2024-01-07 pukul 23 42 31](https://private-user-images.githubusercontent.com/49669018/294772027-fcf079c7-1dd1-46fc-b074-fa3490c3653e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTg0MjA4NjIsIm5iZiI6MTcxODQyMDU2MiwicGF0aCI6Ii80OTY2OTAxOC8yOTQ3NzIwMjctZmNmMDc5YzctMWRkMS00NmZjLWIwNzQtZmEzNDkwYzM2NTNlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA2MTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNjE1VDAzMDI0MlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWY1ZmJiYTg0NTI1N2FkZmJhYWQ1ZThkY2UwZWI3YzZjYjU2ZmI1ZWQ0ZjA2OTY4MGYyMmQ3ZmQ5OWE4YWM2ODkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.esZGs1Q1GgQIPajWXpKGa0o0KI2lTRboI7CdAk37HeA)
Open Dependencies tab in Modules page, then click + button to select JARs or Directories option
![Jepretan Layar 2024-01-07 pukul 23 43 08](https://private-user-images.githubusercontent.com/49669018/294772555-e7c2a0f0-554c-4bef-9f69-7f0e0b6d1e1f.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTg0MjA4NjIsIm5iZiI6MTcxODQyMDU2MiwicGF0aCI6Ii80OTY2OTAxOC8yOTQ3NzI1NTUtZTdjMmEwZjAtNTU0Yy00YmVmLTlmNjktN2YwZTBiNmQxZTFmLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA2MTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNjE1VDAzMDI0MlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTIxYjJmZjkzNTI3MGQxNzBmYzEzMDY4NGY5ZDY2NGQ2ZTExM2ExNDIyMTYyMTQyNjQzYzJhMzU3MmEzN2MyM2YmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.WtlaQfpmeIErwZ2byxoODWtCnD97cRezTENqJmwcHzQ)
Select ALI JAR file from local storage in the computer. After export process is success, there is new line on list of dependency like this
![Jepretan Layar 2024-01-07 pukul 23 54 33](https://private-user-images.githubusercontent.com/49669018/294772751-ceffa9c2-423e-45f4-b266-6853530af9d8.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTg0MjA4NjIsIm5iZiI6MTcxODQyMDU2MiwicGF0aCI6Ii80OTY2OTAxOC8yOTQ3NzI3NTEtY2VmZmE5YzItNDIzZS00NWY0LWIyNjYtNjg1MzUzMGFmOWQ4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA2MTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNjE1VDAzMDI0MlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWVmYjg5MjY4NWE0OGZiMzkzY2FkOTE2NjhhMzVjZmU5NmJkZDYxODc5ODY5NGMxYmQ3MmI4ZTY2NjVkNWQ5NDEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.9rqBM00-vnnaGJMQY7rGhJ9rwlxaHLIcDEu4kwzrPxg)
The functionalities can be called and used
![Jepretan Layar 2024-01-08 pukul 00 08 16](https://private-user-images.githubusercontent.com/49669018/294773499-bb506389-99c2-47f6-8aa7-e0ef9e6a9a26.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTg0MjA4NjIsIm5iZiI6MTcxODQyMDU2MiwicGF0aCI6Ii80OTY2OTAxOC8yOTQ3NzM0OTktYmI1MDYzODktOTljMi00N2Y2LThhYTctZTBlZjllNmE5YTI2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA2MTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNjE1VDAzMDI0MlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTJiMWFmNDJmNzhhNjEyYmE0MTZhMDk3MDY4ZjQ1ZjhmMDQ1YjQ0YjlkMTFkZDhkNmUxN2I5NjQ5NDIwNmVhYjgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.r1t9vGc38PYxHDMDL_fktUbAYm7QL8B-pS73ODv2tF8)
Deep learning models are mathematical in nature and require numerical input. Each pixel in an image can be represented by its intensity values, and in the case of RGB (Red, Green, Blue) images, each pixel has three values corresponding to the intensity of red, green, and blue channels.
![Jepretan Layar 2024-01-08 pukul 00 17 02](https://private-user-images.githubusercontent.com/49669018/294774034-df985f43-0438-4822-a933-580f18473126.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTg0MjA4NjIsIm5iZiI6MTcxODQyMDU2MiwicGF0aCI6Ii80OTY2OTAxOC8yOTQ3NzQwMzQtZGY5ODVmNDMtMDQzOC00ODIyLWE5MzMtNTgwZjE4NDczMTI2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA2MTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNjE1VDAzMDI0MlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTFiNWJkMjEzNWU1NjdmOGRkZjdlMGQ3ZWY2MWRhNDA3ZTNkZmVhNzYzMWVlZTE0NjIyNWViNDdiZDYzNWRjNGUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.rRBv1XU1-jlg_U-hlzsl84GkC_d1CP7Gj_LQNdEBbo4)
But, we must arrange the image dataset like this
![Jepretan Layar 2024-01-08 pukul 00 25 04](https://private-user-images.githubusercontent.com/49669018/294774490-bfe1164b-1b90-4711-98f4-9de071930c09.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTg0MjA4NjIsIm5iZiI6MTcxODQyMDU2MiwicGF0aCI6Ii80OTY2OTAxOC8yOTQ3NzQ0OTAtYmZlMTE2NGItMWI5MC00NzExLTk4ZjQtOWRlMDcxOTMwYzA5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA2MTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNjE1VDAzMDI0MlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTUyYzcxMTk2Y2I3NGFkNDI3ZTlkOGM5YzYxNDFkMzhiYjg5MzFiMmZjZjhkYjcwMjNhNzhhYmY0MWE4MDE4ZmImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.PO0SAPRj86RQ_MFj21Hdp5RQyU_QR5L5HP4iLhkaVLM)
For the ImageReader functionality, there are three main parameter that can be explored.
Parameter | Options |
---|---|
mode | "rgb" or "grayscale" |
normalization | true or false |
alpha | true or false |
The input layer defines the shape and size of the input data that the neural network expects by specifying the number of features or dimensions in the input data. In this module, InputLayer doesn't need special parameters to set up.
![Jepretan Layar 2024-01-08 pukul 09 09 55](https://private-user-images.githubusercontent.com/49669018/294800191-115af000-da00-4653-86be-979a19910749.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTg0MjA4NjIsIm5iZiI6MTcxODQyMDU2MiwicGF0aCI6Ii80OTY2OTAxOC8yOTQ4MDAxOTEtMTE1YWYwMDAtZGEwMC00NjUzLTg2YmUtOTc5YTE5OTEwNzQ5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA2MTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNjE1VDAzMDI0MlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTllMTUyYmFjYjRiMmU4MzAxOGEzZjY2MWZkZjI3ZGY2YWRkOTBiNTk0OTQxZDMwNjQxOTc4YTNiNmU4MGU5ZmQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.KnLVEqM8X7g9htbaf9IvhyX7Wke-_HcQw_StSJg0gVs)
Convolutional layer is a fundamental building block of Convolutional Neural Networks that designed to learn spatial hierarchies of features from the input data adaptively.
![Jepretan Layar 2024-01-08 pukul 09 10 21](https://private-user-images.githubusercontent.com/49669018/294800221-88349255-b3ed-4022-83d6-254baa3097e3.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTg0MjA4NjIsIm5iZiI6MTcxODQyMDU2MiwicGF0aCI6Ii80OTY2OTAxOC8yOTQ4MDAyMjEtODgzNDkyNTUtYjNlZC00MDIyLTgzZDYtMjU0YmFhMzA5N2UzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA2MTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNjE1VDAzMDI0MlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWZkZDk0YmU5M2NmMzFiNWY2NjU1MDQ3M2UwN2Y0OTI4NDMxZmFkZGFhMmMyYzY2MjkyMzQxMDU5ZDkzMGRhZWYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.fZoSeuHuILHGBwzgjeJ_lTnCXH9DMcFnpkfeO0a0TRI)
For the Convolution layer functionality, the are eight main parameter that can be explored.
Parameter | Options |
---|---|
filter | filter 2d in the form of 2x2, 3x3, 5x5 |
activation | "relu", "leaky relu", "elu", "selu", "binary step", "tanh", "arc tan", "prelu", "soft plus", "soft sign", "linear" |
strides | [vertical, horizontal] |
dilations | [vertical, horizontal] |
epoch | 20, 40, 100, until infinity |
erroType | "mse" or "mae" |
learningRate | 0 until 1 |
weightInitial | "xavier", "he", or "standard" |
Filter is a small-sized matrix used for the convolution operation. During the training process, the network adjusts the values of the filter's weights to minimize the difference between the predicted output and the actual target.
![Jepretan Layar 2024-01-08 pukul 08 46 36](https://private-user-images.githubusercontent.com/49669018/294798498-9c053ab7-71ee-40c1-ab9e-f22d53e6a984.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTg0MjA4NjIsIm5iZiI6MTcxODQyMDU2MiwicGF0aCI6Ii80OTY2OTAxOC8yOTQ3OTg0OTgtOWMwNTNhYjctNzFlZS00MGMxLWFiOWUtZjIyZDUzZTZhOTg0LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA2MTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNjE1VDAzMDI0MlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWUyOWVmYjE5NDUwOTE4MmFjZTA5MjMxOWU1MmVjYzVhMzlmNTQwYjM5ZTgzY2ZjNjUyMDE1Y2NiMWM4YWViOWUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.c6e_XxLGq2j1PTWnLoVQjrzIOVRSRk8EiudQ1OzOwRc)
It is down-sampling operation to reduce the spatial dimensions of the input volume and subsequently decrease the computational complexity of the network.
![Jepretan Layar 2024-01-08 pukul 09 11 13](https://private-user-images.githubusercontent.com/49669018/294800287-64216081-c52f-4916-b8ef-10aa7627e9bf.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTg0MjA4NjIsIm5iZiI6MTcxODQyMDU2MiwicGF0aCI6Ii80OTY2OTAxOC8yOTQ4MDAyODctNjQyMTYwODEtYzUyZi00OTE2LWI4ZWYtMTBhYTc2MjdlOWJmLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA2MTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNjE1VDAzMDI0MlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTBkZDNiYmM4ZTE5NTZhZWY0NDliZjQ5YzM5YTNlYTIzNTY4OThjMWMyYzNjNTAwMzY5NTA5ZmM2ZDg2ZWVmMDUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.VdFD8kBl6jmlo-qlLj-XuAZK6ChTYD8J2e60EsiEAvA)
For the Subsample layer functionality, there are four main parameter that can be explored.
Parameter | Options |
---|---|
type | "min", "max", or "average" |
kernel | [vertical, horizontal] |
strides | [vertical, horizontal] |
dilations | [vertical, horizontal] |
The purpose of the flatten operation is to transition from the spatial representation of features in the convolutional and pooling layers to a format that can be fed into traditional fully connected layers.
![Jepretan Layar 2024-01-08 pukul 09 11 48](https://private-user-images.githubusercontent.com/49669018/294800328-9dc8e46f-32da-4654-b78b-11beb88704f3.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTg0MjA4NjIsIm5iZiI6MTcxODQyMDU2MiwicGF0aCI6Ii80OTY2OTAxOC8yOTQ4MDAzMjgtOWRjOGU0NmYtMzJkYS00NjU0LWI3OGItMTFiZWI4ODcwNGYzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA2MTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNjE1VDAzMDI0MlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTZjYmY1YjNlODVkN2U2ZGViNGFjOGJiZmY4NmE0YTk2MWRlMWFiOGU2NTQ0MmUzMTM1Y2M4M2M5YWRiMmNmYjEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.FQw5QZM_mP4WZQAuEe-zUOlkOsjxkrugdv3FLcpTXpk)
In this module, InputLayer functinality doesn't need special parameters to set up.
Fully Connected is a type of layer where each neuron or node is connected to every neuron in the previous and the next layers. Unlike convolutional and pooling layers, which operate on local regions of the input, fully connected layers process the entire input.
![Jepretan Layar 2024-01-08 pukul 09 42 44](https://private-user-images.githubusercontent.com/49669018/294802957-463a2ea3-3205-4e33-a850-736292f99fb3.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTg0MjA4NjIsIm5iZiI6MTcxODQyMDU2MiwicGF0aCI6Ii80OTY2OTAxOC8yOTQ4MDI5NTctNDYzYTJlYTMtMzIwNS00ZTMzLWE4NTAtNzM2MjkyZjk5ZmIzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA2MTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNjE1VDAzMDI0MlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTFiNzJjZGNjNzUwMWE2MTg5Y2EzYjAxODE5NTM0MTE5MDY4NGQ1NGQ2ZjJmNjVkYTA0ODc2N2U4MzYyYWVjNTcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.-iP5xMMMvYn7kKk_WPl3rryqzjpOSU-EnxiZT2tIlwI)
For the Fully Connected layer functionality, the are six main parameter that can be explored.
Parameter | Options |
---|---|
unit | numerical array |
activation | "relu", "leaky relu", "elu", "selu", "binary step", "tanh", "arc tan", "prelu", "soft plus", "soft sign", "linear" |
epoch | 20, 40, 100, until infinity |
erroType | "mse" or "mae" |
learningRate | 0 until 1 |
weightInitial | "xavier", "he", or "standard" |
String path = "/Users/oktaviacitra/cifar/";
String[] labels = new LabelReader(path + "train/").getClasses();
ImageReader reader = ImageReader.getInstance(labels, "grayscale").normalization(true);
RandomState randomState = new RandomState();
double[][][][] trainImages = reader.retrieve(path + "/train");
double[][] trainTargets = reader.getTargets();
trainImages = randomState.generate(trainImages, trainTargets);
trainTargets = randomState.getTarget();
double[][][][] testImages = reader.retrieve(path + "/test");
double[][] testTargets = reader.getTargets();
Input2DLayer inputLayer = Input2DLayer.getInstance("layer 2");
double[][][][][] trainFeatures = inputLayer.transform(trainImages);
double[][][][][] testFeatures = inputLayer.transform(testImages);
double[][][] filter = new double[][][]{
Filter2D.Kernel3x3.HORIZONTAL_LINES_DETECTION,
Filter2D.Kernel2x2.ROBERTS_HORIZONTAL
};
Convolution2DLayer convolution2DLayer = Convolution2DLayer.getInstance("layer 2", filter)
.activation("relu")
.dilations(new int[]{1, 2})
.strides(new int[]{2, 1})
.epoch(20)
.errorType("mae")
.learningRate(0.01)
.weightInitial("xavier");
trainFeatures = convolution2DLayer.train(trainFeatures, testFeatures, true);
testFeatures = convolution2DLayer.getTestOutputs();
SubSample2DLayer subSample2DLayer = SubSample2DLayer.getInstance("layer 3", "max", new int[]{3, 3})
.strides(new int[]{2, 2})
.dilations(new int[]{2, 2});
trainFeatures = subSample2DLayer.transform(trainFeatures);
testFeatures = subSample2DLayer.transform(testFeatures);
Flatten2DLayer flatten2DLayer = Flatten2DLayer.getInstance("layer 4");
double[][] trainFlatten = flatten2DLayer.transform(trainFeatures);
double[][] testFlatten = flatten2DLayer.transform(testFeatures);
FullyConnectedLayer fullyConnectedLayer = FullyConnectedLayer
.getInstance("layer 5", new int[]{32, 16, 10}, new String[]{"relu", "relu", "softmax"})
.learningRate(0.01)
.errorType("mae")
.epoch(20)
.weightInitial("he");
double[][] trainOutputs = fullyConnectedLayer
.train(trainFlatten, testFlatten, trainTargets, testTargets, true);
double[][] testOutputs = fullyConnectedLayer.getTestOutputs();