Классификация с использованием алгоритма обратного распространения - PullRequest
1 голос
/ 08 марта 2020

https://drive.google.com/file/d/1QsuyL7JBWU7G2J440iLgQnwErcXY4rR6/view?usp=sharing

Приведенный выше набор данных имеет 7200 записей и 3 выходных класса (1,2,3). Я использовал алгоритм обратного распространения. Кто-нибудь может сказать мне, как взять скрытый слой и значения эпох?

def initialize_network(n_inputs,n_hidden,n_outputs):
    network=list()
    hidden_layer=[{'weights':[random.uniform(-0.5,0.5) for i in range(n_inputs+1)]}for i in range(n_hidden)]
    network.append(hidden_layer)
    output_layer=[{'weights':[random.uniform(-0.5,0.5) for i in range(n_hidden+1)]}for i in range(n_outputs)]
    network.append(output_layer)
    return network

def train_network(network,train,l_rate,n_epoch,n_outputs):
    for epoch in range(n_epoch):
        sum_error=0
        for row in train:
            outputs=forward_propagate(network,row)
            expected=[0 for i in range(n_outputs)]
            expected[row[-1]]=1
            sum_error+=sum([(expected[i]-outputs[i])**2 for i in range(len(expected))])
            backword_propogate_error(network,expected)
            update_weights(network,row,l_rate)

n_inputs=21
n_outputs=3
network=initialize_network(n_inputs,21,n_outputs)
train_network(network,dataset,0.3,10,n_outputs)

Я использую этот код для обучения моей модели. Этот код отлично подходит для бинарной классификации. Но у меня есть 3 класса. Как изменить две строки, чтобы получить классификацию?

expected=[0 for i in range(n_outputs)]
                expected[row[-1]]=1
...