Как графически отобразить все нейроны в виде графа?
Основная проблема заключается в том, что не хватает знаний, как можно графически показать в отдельном окне, желательно с интеграцией в pyQt5, нейроны в виде графа, которые получились в процессе обучения. То есть, графически показать их связи между собой. Ниже представлен код
import tensorflow as tf
import pandas as pd
import random
from tabulate import tabulate
data = {'student': ['Дмитрий', 'Вячеслав', 'Артем', 'Олег', 'Андрей'],
'avg_grade': [2.4, 4.4, 2.3, 2.9, 3.0],
'pull-ups': [15, 3, 7, 10, 9],
'uniforms': [1, 9, 3, 3, 7],
'class': ['A', 'B', 'C', 'A', 'A']}
# преобразуем данные в DataFrame
df = pd.DataFrame(data)
# определяем параметры модели
input_size = 3
output_size = 3
hidden_size = 10
# создаем модель обучения с учителем
model = tf.keras.Sequential([
tf.keras.layers.Dense(hidden_size, activation='relu', input_shape=(input_size,)),
tf.keras.layers.Dense(hidden_size, activation='relu'),
tf.keras.layers.Dense(output_size, activation='softmax')
])
# компилируем модель
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
# разделяем данные на обучающую и тестовую выборки
X_train = df[['avg_grade', 'pull-ups', 'uniforms']]
y_train = pd.get_dummies(df['class'])
X_test = X_train.sample(frac=0.5)
y_test = y_train.loc[X_test.index]
X_train = X_train.drop(X_test.index)
y_train = y_train.drop(X_test.index)
# обучаем модель на обучающей выборке
model.fit(X_train, y_train, epochs=1000)
# определяем класс студента на основе его параметров
student = {'avg_grade': 4.3, 'pull-ups': 15, 'uniforms': 4}
input_data = [[student['avg_grade'], student['pull-ups'], student['uniforms']]]
output_data = model.predict(input_data)
class_index = tf.math.argmax(output_data, axis=1).numpy()[0]
class_list = ['A', 'B', 'C']
class_tf = class_list[class_index]
# создаем таблицу со случайными параметрами
students = ['Дмитрий', 'Вячеслав', 'Артем', 'Олег', 'Андрей']
data = []
for student in students:
avg_grade = round(random.uniform(2, 5), 1)
pull_ups = random.randint(0, 25)
uniforms = random.randint(0, 15)
data.append([student, avg_grade, pull_ups, uniforms])
# выводим таблицу в консоль
print(tabulate(data, headers=['студент', 'Ср. балл', 'Подтягивания', 'Наряды']))
# определяем класс для каждого студента
classes = []
for student_data in data:
input_data = [[student_data[1], student_data[2], student_data[3]]]
output_data = model.predict(input_data)
class_index = tf.math.argmax(output_data, axis=1).numpy()[0]
class_list = ['A', 'B', 'C']
class_tf = class_list[class_index]
classes.append(class_tf)
()
# выделяем каждый класс своим цветом
colors = {'A': '\033[91m', 'B': '\033[92m', 'C': '\033[93m'}
for i in range(len(data)):
class_color = colors[classes[i]]
print(class_color + data[i][0] + ': ' + classes[i] + '\033[0m')
Источник: Stack Overflow на русском