Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -43,8 +43,8 @@ class GeneticAlgorithm:
|
|
43 |
X_train, X_test, y_train, y_test = generate_dataset(self.task_id)
|
44 |
fitness = []
|
45 |
for i, net in enumerate(self.population):
|
46 |
-
net.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
|
47 |
net.build(input_shape=(None, 10))
|
|
|
48 |
net.fit(X_train, y_train, epochs=10, verbose=0)
|
49 |
loss, accuracy = net.evaluate(X_test, y_test, verbose=0)
|
50 |
fitness.append(accuracy)
|
@@ -53,21 +53,19 @@ class GeneticAlgorithm:
|
|
53 |
|
54 |
def crossover(self):
|
55 |
offspring = []
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
|
67 |
def mutation(self):
|
68 |
-
X = np.random.rand(1, 10)
|
69 |
for net in self.population:
|
70 |
-
net.build(input_shape=(None, 10))
|
71 |
if random.random() < 0.1:
|
72 |
weights = net.get_weights()
|
73 |
new_weights = [np.array(w) + np.random.randn(*w.shape) * 0.1 for w in weights]
|
@@ -94,22 +92,19 @@ if st.button("Run evolution"):
|
|
94 |
ga.mutation()
|
95 |
st.write(f"Generation {generation+1} complete")
|
96 |
|
97 |
-
|
98 |
if gas is not None:
|
99 |
final_accuracy = []
|
100 |
-
|
101 |
X_train, X_test, y_train, y_test = generate_dataset(task_id)
|
102 |
accuracy = []
|
103 |
for net in ga.population:
|
104 |
net.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
|
105 |
-
net.build(input_shape=(None, 10))
|
106 |
net.fit(X_train, y_train, epochs=10, verbose=0)
|
107 |
loss, acc = net.evaluate(X_test, y_test, verbose=0)
|
108 |
accuracy.append(acc)
|
109 |
if len(accuracy) > 0:
|
110 |
final_accuracy.append(np.mean(accuracy))
|
111 |
-
if len(final_accuracy) > 0:
|
112 |
-
st.write(f"Final accuracy: {np.mean(final_accuracy)}")
|
113 |
|
114 |
# Trade populations between tasks
|
115 |
if gas is not None:
|
@@ -133,7 +128,6 @@ if st.button("Run evolution"):
|
|
133 |
accuracy = []
|
134 |
for net in ga.population:
|
135 |
net.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
|
136 |
-
net.build(input_shape=(None, 10))
|
137 |
net.fit(X_train, y_train, epochs=10, verbose=0)
|
138 |
loss, acc = net.evaluate(X_test, y_test, verbose=0)
|
139 |
accuracy.append(acc)
|
|
|
43 |
X_train, X_test, y_train, y_test = generate_dataset(self.task_id)
|
44 |
fitness = []
|
45 |
for i, net in enumerate(self.population):
|
|
|
46 |
net.build(input_shape=(None, 10))
|
47 |
+
net.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
|
48 |
net.fit(X_train, y_train, epochs=10, verbose=0)
|
49 |
loss, accuracy = net.evaluate(X_test, y_test, verbose=0)
|
50 |
fitness.append(accuracy)
|
|
|
53 |
|
54 |
def crossover(self):
|
55 |
offspring = []
|
56 |
+
for _ in range(self.population_size//2):
|
57 |
+
parent1, parent2 = random.sample(self.population, 2)
|
58 |
+
child = Net()
|
59 |
+
child.build(input_shape=(None, 10))
|
60 |
+
parent1_weights = parent1.get_weights()
|
61 |
+
parent2_weights = parent2.get_weights()
|
62 |
+
child_weights = [(np.array(w1) + np.array(w2)) / 2 for w1, w2 in zip(parent1_weights, parent2_weights)]
|
63 |
+
child.set_weights(child_weights)
|
64 |
+
offspring.append(child)
|
65 |
+
self.population += offspring
|
66 |
|
67 |
def mutation(self):
|
|
|
68 |
for net in self.population:
|
|
|
69 |
if random.random() < 0.1:
|
70 |
weights = net.get_weights()
|
71 |
new_weights = [np.array(w) + np.random.randn(*w.shape) * 0.1 for w in weights]
|
|
|
92 |
ga.mutation()
|
93 |
st.write(f"Generation {generation+1} complete")
|
94 |
|
95 |
+
# Evaluate the final population
|
96 |
if gas is not None:
|
97 |
final_accuracy = []
|
98 |
+
for task_id, ga in enumerate(gas):
|
99 |
X_train, X_test, y_train, y_test = generate_dataset(task_id)
|
100 |
accuracy = []
|
101 |
for net in ga.population:
|
102 |
net.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
|
|
|
103 |
net.fit(X_train, y_train, epochs=10, verbose=0)
|
104 |
loss, acc = net.evaluate(X_test, y_test, verbose=0)
|
105 |
accuracy.append(acc)
|
106 |
if len(accuracy) > 0:
|
107 |
final_accuracy.append(np.mean(accuracy))
|
|
|
|
|
108 |
|
109 |
# Trade populations between tasks
|
110 |
if gas is not None:
|
|
|
128 |
accuracy = []
|
129 |
for net in ga.population:
|
130 |
net.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
|
|
|
131 |
net.fit(X_train, y_train, epochs=10, verbose=0)
|
132 |
loss, acc = net.evaluate(X_test, y_test, verbose=0)
|
133 |
accuracy.append(acc)
|