Вызов одного определения внутри другого Python - PullRequest
0 голосов
/ 14 марта 2019

Я пытаюсь тренировать персептрон в Python, у которого есть 3 разных класса кошек: тигры, львы и гепарды.Для этого я хочу создать график прогрессии точности персептрона.Первоначально я создал 3 файла Python, каждый из которых предназначен для обучения персептрона для каждого класса.Приведенный ниже код является общим для каждого файла - есть ли способ в Python, чтобы я мог объединить эти три файла и реализовать приведенный ниже код как def?

Общий код:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
import Perceptron as nn

def commonCode(!WHAT PARAMETERS SHOULD GO HERE?!):

В идеалеЯ хочу вызвать функции Lion и Tiger (см. Ниже) здесь, однако я не уверен, какие параметры мне нужно вызывать, и как это реализовать.

(weigths, accuracy, accuracy_progression) = nn.perceptronLearning(data,epochs,learning_rate, target_accuracy)

(tp,tn,fp,fn) = p.confusionMatrix(weigths,data)

print('weigths: ', weigths)
print('accuracy: ', accuracy)

print('true positive: %d    true negative: %d',(tp,tn))
print('false positive: %d   false negative: %d',(fp,fn))

title = "%d_iterations_lambda=%f" %(len(accuracy_progression),learning_rate)
path = "./Plots/%s.png" %(title)

plt.title(title)
plt.ylabel('accuracy (%)')
plt.xlabel('iteration')
plt.plot(accuracy_progression)
plt.show()

файл train_Lion.py:

def Lion (cat): 
    if cat == b'Cat-lion':
        return 1
    else:
        return 0

filename = 'cat.data'
data = np.loadtxt(filename,delimiter=',',converters={4:lion})
np.random.shuffle(data)

epochs = 30
learning_rate = 0.1
target_accuracy = 100

файл train_Tiger.py:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
import Perceptron as nn
def Tiger (cat): 
    if cat == b'Cat-tiger':
        return 1
    else:
        return 0

filename = 'cat.data'
data = np.loadtxt(filename,delimiter=',',converters={4:tiger})
np.random.shuffle(data)

epochs = 30
learning_rate = 0.2
target_accuracy = 95

и т. Д.Скорость обучения и целевая точность варьируются между классами, поэтому я не уверен, должны ли они быть переданы в качестве параметров?Любой совет будет принята с благодарностью!

1 Ответ

0 голосов
/ 14 марта 2019

Я мог бы настроить это так:

Один класс, который выполняет изучение и построение персептрона, которые вы начинаете с эпохой, learning_rate, target_accuracy и data. Затем отдельные модули могут определить свои конкретные значения и создать экземпляр класса.

Вот довольно простое завершение вашей реализации. Я возвращаю кортеж (веса, точности, точности_последовательности), чтобы вы могли при желании обработать его в ваших отдельных модулях. Можно конечно, рефакторинг дальше:

import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
import Perceptron as nn


class PPlotter:
    def __init__(self, epochs, learning_rate, target_accuracy, data):
        self.epochs = epochs
        self.learning_rate = learning_rate
        self.target_accuracy = target_accuracy
        self.data = data

    def plot_accuracy_progression(self):
        (weights, accuracy, accuracy_progression) = nn.perceptronLearning(self.data, self.epochs, self.learning_rate, self.target_accuracy)

        (tp,tn,fp,fn) = p.confusionMatrix(weigths,self.data)

        print('weights: ', weights)
        print('accuracy: ', accuracy)

        print('true positive: %d    true negative: %d',(tp,tn))
        print('false positive: %d   false negative: %d',(fp,fn))

        title = "%d_iterations_lambda=%f" %    (len(accuracy_progression),learning_rate)
        path = "./Plots/%s.png" %(title)
        plt.title(title)
        plt.ylabel('accuracy (%)')
        plt.xlabel('iteration')
        plt.plot(accuracy_progression)
        plt.show()

        return (weights, accuracy, accuracy_progression)

Тогда вот пример того, как может выглядеть train_Lion.py:

import numpy as np
import PPlotter

def Lion (cat):
    if cat == b'Cat-lion':
        return 1
    else:
        return 0

filename = 'cat.data'
data = np.loadtxt(filename,delimiter=',',converters={4:lion})
np.random.shuffle(data)

epochs = 30
learning_rate = 0.1
target_accuracy = 100

plotter = PPlotter(epochs, learning_rate, target_accuracy, data)

(weights, accuracy, accuracy_progression) = plotter.plot_accuracy_progression()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...