Skip to content

Commit dca6a04

Browse files
committed
Initial commit
0 parents  commit dca6a04

File tree

156 files changed

+5136
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

156 files changed

+5136
-0
lines changed

.gitattributes

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# Auto detect text files and perform LF normalization
2+
* text=auto

.project

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<projectDescription>
3+
<name>IAProjects</name>
4+
<comment></comment>
5+
<projects>
6+
</projects>
7+
<buildSpec>
8+
</buildSpec>
9+
<natures>
10+
</natures>
11+
</projectDescription>

Clustering/.classpath

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<classpath>
3+
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
4+
<classpathentry kind="src" path="src"/>
5+
<classpathentry combineaccessrules="false" kind="src" path="/NeuralNetwork"/>
6+
<classpathentry kind="output" path="bin"/>
7+
</classpath>

Clustering/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/bin/

Clustering/.project

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<projectDescription>
3+
<name>Clustering</name>
4+
<comment></comment>
5+
<projects>
6+
</projects>
7+
<buildSpec>
8+
<buildCommand>
9+
<name>org.eclipse.jdt.core.javabuilder</name>
10+
<arguments>
11+
</arguments>
12+
</buildCommand>
13+
</buildSpec>
14+
<natures>
15+
<nature>org.eclipse.jdt.core.javanature</nature>
16+
</natures>
17+
</projectDescription>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
eclipse.preferences.version=1
2+
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
3+
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
4+
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
5+
org.eclipse.jdt.core.compiler.compliance=1.8
6+
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
7+
org.eclipse.jdt.core.compiler.debug.localVariable=generate
8+
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
9+
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
10+
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
11+
org.eclipse.jdt.core.compiler.source=1.8

Clustering/src/moregroups/Main2.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package moregroups;
2+
import twogroups.Window;
3+
4+
public class Main2 {
5+
public static void main(String[]args) {
6+
7+
Window2 w = new Window2(-1, 1000);
8+
w.setVisible(true);
9+
}
10+
}
Lines changed: 238 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,238 @@
1+
package moregroups;
2+
3+
import java.awt.Color;
4+
import java.awt.Font;
5+
import java.awt.Graphics;
6+
import java.awt.Graphics2D;
7+
import java.awt.RenderingHints;
8+
import java.awt.event.KeyAdapter;
9+
import java.awt.event.KeyEvent;
10+
import java.awt.event.MouseAdapter;
11+
import java.awt.event.MouseEvent;
12+
import java.awt.image.BufferedImage;
13+
import java.util.LinkedList;
14+
15+
import javax.swing.JPanel;
16+
import javax.swing.SwingUtilities;
17+
18+
import core.Tensor;
19+
import dataset.DataElement;
20+
import dataset.Dataset;
21+
import errors.CrossEntropy;
22+
import errors.MSE;
23+
import function.activation.Logistic;
24+
import function.activation.Softmax;
25+
import initializer.Random;
26+
import initializer.Zeros;
27+
import layers.FullyConnectedLayer;
28+
import neuralnetwork.Constants;
29+
import neuralnetwork.NetworkMonitor;
30+
import neuralnetwork.NetworkTask;
31+
import neuralnetwork.NeuralNetwork;
32+
import optimization.SGD;
33+
import utils.ColorUI;
34+
import utils.Point;
35+
36+
public class Simulation2 extends JPanel {
37+
LinkedList<Point> points = new LinkedList<Point>();
38+
double error=0;
39+
double batchProgress=0;
40+
NeuralNetwork nn;
41+
BufferedImage image;
42+
Color[] listColors = new Color[] { new Color(0, 128, 255), new Color(0, 204, 0), new Color(153, 51, 255),
43+
new Color(255, 128, 0), new Color(0,204,204), new Color(204,0,204),new Color(204,0,0), new Color(102,102,255)};
44+
int selected = 0;
45+
ColorUI[]colorsUI= new ColorUI[listColors.length];
46+
boolean firstRender=true;
47+
public Simulation2() {
48+
this.setBackground(Color.black);
49+
// Constants.DEBUG=true;
50+
nn = new NeuralNetwork(2, 3, new Random(-1, 1), new Zeros(), new Logistic(), new MSE());
51+
nn.addLayer(new FullyConnectedLayer(15, new Random(-1, 1), new Zeros(), new Logistic()));
52+
nn.addLayer(new FullyConnectedLayer(15, new Random(-1, 1), new Zeros(), new Logistic()));
53+
// Logistic()));
54+
// nn.addLayer(new FullyConnectedLayer(15, new Random(-1, 1), new Zeros(), new
55+
// Logistic()));
56+
nn.initialize();
57+
58+
this.addMouseListener(new MouseAdapter() {
59+
60+
@Override
61+
public void mousePressed(MouseEvent e) {
62+
if (selected >= 0) {
63+
64+
points.add(new Point(e.getX(), e.getY(), listColors[selected]));
65+
66+
Simulation2.this.repaint();
67+
}
68+
69+
super.mouseClicked(e);
70+
}
71+
72+
});
73+
this.addKeyListener(new KeyAdapter() {
74+
75+
@Override
76+
public void keyPressed(KeyEvent e) {
77+
if(e.getKeyCode()==KeyEvent.VK_R) {
78+
random();
79+
}
80+
if(e.getKeyCode()==KeyEvent.VK_C) {
81+
points.clear();
82+
image=null;
83+
repaint();
84+
}
85+
if (e.getKeyCode() == KeyEvent.VK_T) {
86+
train();
87+
}else {
88+
for(ColorUI c:colorsUI) {
89+
c.setSelected(false);
90+
}
91+
if (e.getKeyCode() == KeyEvent.VK_1)
92+
selected = 0;
93+
if (e.getKeyCode() == KeyEvent.VK_2)
94+
selected = 1;
95+
if (e.getKeyCode() == KeyEvent.VK_3)
96+
selected = 2;
97+
if (e.getKeyCode() == KeyEvent.VK_4)
98+
selected = 3;
99+
if (e.getKeyCode() == KeyEvent.VK_5)
100+
selected = 4;
101+
if (e.getKeyCode() == KeyEvent.VK_6)
102+
selected = 5;
103+
if (e.getKeyCode() == KeyEvent.VK_7)
104+
selected = 6;
105+
if (e.getKeyCode() == KeyEvent.VK_8)
106+
selected = 7;
107+
colorsUI[selected].setSelected(true);
108+
repaint();
109+
}
110+
111+
super.keyPressed(e);
112+
}
113+
114+
});
115+
this.setFocusable(true);
116+
this.requestFocus();
117+
}
118+
119+
public Dataset createDataset() {
120+
Dataset d = new Dataset();
121+
for (Point p : points) {
122+
DataElement elem = new DataElement();
123+
Tensor t = new Tensor(
124+
new double[][] { { p.getX() / (double) getWidth() }, { p.getY() / (double) getHeight() } });
125+
t.print();
126+
elem.setInput(t);
127+
128+
elem.setDesired(new Tensor(new double[][] { { p.getColor().getRed() / 255d },
129+
{ p.getColor().getGreen() / 255d }, { p.getColor().getBlue() / 255d } }));
130+
elem.getDesired().print();
131+
d.getData().add(elem);
132+
133+
}
134+
return d;
135+
136+
}
137+
public void random() {
138+
points.clear();
139+
int n=30;
140+
for(int i=0;i<n;i++) {
141+
int k=(int)(Math.random()*8);
142+
int x=(int)(Math.random()*getWidth());
143+
int y=(int)(Math.random()*getHeight());
144+
points.add(new Point(x,y,listColors[k]));
145+
}
146+
repaint();
147+
148+
}
149+
150+
public void train() {
151+
// Constants.DEBUG=true;
152+
153+
Dataset d = createDataset();
154+
if(d.getData().isEmpty())return;
155+
SGD s = new SGD();
156+
157+
s.setLearningRateWeights(0.05d);
158+
s.setLearningRateBiases(0.08d);
159+
160+
NetworkTask task = nn.train(d, 3000, 1, s);
161+
NetworkMonitor m = (new NetworkMonitor() {
162+
163+
@Override
164+
public void onIteration() {
165+
error=this.getError();
166+
batchProgress=this.getEpoch()/(double)this.getTotalEpochs();
167+
repaint();
168+
}
169+
170+
@Override
171+
public void onFinish() {
172+
batchProgress=1;
173+
Constants.DEBUG = false;
174+
image = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_ARGB);
175+
for (int i = 0; i < getWidth(); i++) {
176+
for (int j = 0; j < getHeight(); j++) {
177+
Tensor output = nn.feedForward(new Tensor(
178+
new double[][] { { i / (double) getWidth() }, { j / (double) getHeight() } }));
179+
180+
float r = (float) output.getComponents()[0].getComponents()[0].getValue();
181+
float g = (float) output.getComponents()[1].getComponents()[0].getValue();
182+
float b = (float) output.getComponents()[2].getComponents()[0].getValue();
183+
184+
image.setRGB(i, j, new Color(r, g, b).getRGB());
185+
186+
}
187+
repaint();
188+
}
189+
190+
}
191+
});
192+
m.setPrintStatus(false);
193+
task.setMonitor(m);
194+
Thread t = new Thread(task);
195+
t.start();
196+
}
197+
198+
public void paint(Graphics g) {
199+
super.paint(g);
200+
if(firstRender) {
201+
int j=10;
202+
int a=0;
203+
for(Color c: listColors) {
204+
ColorUI ui = new ColorUI(j, getHeight()-50, c, Character.forDigit(a+1, 10));
205+
colorsUI[a]=ui;
206+
j=j+50;
207+
a++;
208+
}
209+
firstRender=false;
210+
}
211+
Graphics2D g2 = (Graphics2D) g;
212+
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
213+
214+
if (image != null) {
215+
216+
g.drawImage(image, 0, 0, null);
217+
}
218+
for (Point p : points) {
219+
g.setColor(p.getColor());
220+
g.fillOval(p.getX(), p.getY(), 20, 20);
221+
}
222+
for(ColorUI c:colorsUI) {
223+
c.paint(g2);
224+
}
225+
g.setFont(new Font("Noto Sans",Font.BOLD,16));
226+
g.setColor(Color.LIGHT_GRAY);
227+
g.drawString("Randomize Press R", 20, 20);
228+
g.drawString("Train and test press T", 20, 50);
229+
g.drawString("Click to add a point", 20, 80);
230+
g.drawString("C to clear canvas", 20, 110);
231+
g.drawString("Error: "+error, 20, 140);
232+
String prog=String.format("%.2g%n", batchProgress*100);
233+
g.drawString("Progress: "+prog+"%", 20, 170);
234+
235+
236+
237+
}
238+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package moregroups;
2+
import java.util.ArrayList;
3+
4+
import javax.swing.JFrame;
5+
6+
public class Window2 extends JFrame{
7+
8+
public Window2(int width,int height) {
9+
if(width==-1||height==-1) {
10+
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
11+
this.setUndecorated(true);
12+
}else {
13+
this.setSize(width,height);
14+
}
15+
16+
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
17+
this.setResizable(false);
18+
this.setTitle("Clustering");
19+
this.setLocationRelativeTo(null);
20+
this.setContentPane(new Simulation2());
21+
}
22+
}

Clustering/src/twogroups/Main.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package twogroups;
2+
3+
public class Main {
4+
public static void main(String[]args) {
5+
6+
Window w = new Window(1000, 800);
7+
w.setVisible(true);
8+
}
9+
}

0 commit comments

Comments
 (0)