# словарь, хранящий объект сети и служебную информацию
net = create_net_from_json(
    os.path.join(RESOURCES_DIR, "topologies", "bp_test_topology.json"))
# объект сети
network = net.get("object")
# размер входной последовательности
len_image = network.get_input_size()
# имя нейронной сети. Участвует в формировании имен слоев.
# Формат: "символьное_имя[N1-N2-N3-...-Nm]", где Ni - число нейронов в i слое
NETWORK_NAME = net.get("name")
# папка с образами для обучения. Путь относительно текущей директории
TEMPLATE_FOLDER = net.get("payload").get("template_folder")
# папка с образами для фазы распознавания
RECOGNIZE_FOLDER = net.get("payload").get("recognize_folder")
# получаем список всех групп образов для обучения - список папок с группами
group_list = folder_scan(os.path.join(RESOURCES_DIR, TEMPLATE_FOLDER))
# сортируем для дальнейшего маппинга номера выходного нейрона с именем группы
group_list.sort()

# Для задания числа входных сигналов сети возьмем длину любого шаблона из списка
# Далее проверка наличия шаблонов в папке TEMPLATE_FOLDER
for folder in group_list:
    if not folder_scan(os.path.join(RESOURCES_DIR, TEMPLATE_FOLDER, folder)):
        msg = "Group %s is empty!" % folder
        logger.error(msg)
        raise RuntimeError(msg)

# словарь соответсвтвия. Ключ - имя группы, значение - номер нейрона на выходе сети
group_identify = {}
table = EasyTables(["Group name", "Index of out network"])
logger.debug("Generate mapping...")
예제 #2
0
import os
from next.next import RESOURCES_DIR
from util.parser import NumberParser
from util.easyTables import EasyTables
from entities.perceptron import Perceptron
from util.folder_scaner import folder_scan
from store.impl.perceptron_mock_store import PerseptronMockStoreService

template_folder = os.path.join(RESOURCES_DIR, "digit_templates")
# инициализируем персептрон для проверки четности числа
perceptron = Perceptron(name="even",
                        number_of_input=66,
                        store_service=PerseptronMockStoreService())

# получаем список всех файлов в папке шаблонов
list_of_numbers = folder_scan(template_folder)

# словарь соответствия буквенных названий цифр и числовых
numbers = {
    "zero": 0,
    "one": 1,
    "two": 2,
    "three": 3,
    "four": 4,
    "five": 5,
    "six": 6,
    "seven": 7,
    "eight": 8,
    "nine": 9,
    "ten": 10
}
예제 #3
0
    Функция для представления списка нулей и единиц в виде bmp изображения.
    :param array: список нулей и единиц
    :return: 
    """
    img = Image.new('1', (100, 100))
    pixels = img.load()
    for i in range(img.size[0]):
        for j in range(img.size[1]):
            pixels[i, j] = array.pop(0)
    img.show()


# папка с образами
image_folder = os.path.join(BASE_DIR, "number_images")
# список образов в папке
templates = folder_scaner.folder_scan(image_folder)

# объект сети АРТ. Каждое изображение имеет разрешение 100x100, поэтому число входов = 10000
network = Network(name="IMAGE_NUMBERS", number_of_input=10000, auto_save=False)

print("----------------- {} -----------------".format("Фаза обучения"))

for template in templates:
    # в цикле проходим по всем образам и подаем их на вход сети
    image = image_folder + template
    print("template: ", template)
    out = network.recognize(parse_image(image))
    print()

print("----------------- {} -----------------".format("Фаза тестирования"))
예제 #4
0
    Провести процедуру обучения на всех имеющихся образах (шаблоны чисел в папке TEMPLATE_FOLDER)
    и затем, изменяя входные данные (внося исправления в шаблоны из папки TEMPLATE_FOLDER),
    наблюдать за вычислением сети.
    Шаблоны сканируются автоматически. Список ожидаемого отклика формируется следующим образом:
    для i-ого шаблона i-ый элемент в списке выставляется равным единице, остальные нулю.
"""

set_option("base_neuron_store", PerseptronMockStoreService())

# имя нейронной сети. Участвует в формировании имен слоев
NETWORK_NAME = "template_number"
# папка с образами для обучения. Путь относительно текущей директории
TEMPLATE_FOLDER = "digit_templates"

# получаем список всех образов для обучения
templates = folder_scan(os.path.join(RESOURCES_DIR, TEMPLATE_FOLDER))
templates.sort()

# Для задания числа входных сигналов сети возьмем длину любого шаблона из списка
len_input_data = len(NumberParser.parse(os.path.join(RESOURCES_DIR, TEMPLATE_FOLDER, templates[0]))[0])

# Создаем нулевой слой сети.
# number_of_input_signal равен числу входных сигналов.
# number_neurons_in_layer определяет число нейронов в слое и
# так же число выходов самого слоя
layer0 = Layer(name="{}#0".format(NETWORK_NAME),  number_of_input_signal=len_input_data,
               number_neurons_in_layer=7)
# При создании второго слоя в сети необходимо выставить number_of_input_signal
# равным числу выходов предыдущего слоя.
# Экспериментальное наблюдение: если число нейронов в данном слое (layer1) равно 10,
# сеть учится наиболее быстро и более устойчива к помехам в образах