У меня есть базовый класс оценщика, который я создал, который обучает NN из TF.keras
что-то вроде:
TF_NN(BaseEstimator):
def __init__(self,...,parameter='defaultstring', metric='accuracy', ...):
self.parameter = parameter
self.metric=metric
... #build a tf.keras n_network + methods + other assignments
Теперь вот часть, которая является странной. Я запускаю этот код
nn = TF_NN(...,parameter='some_string',...)
clf = VotingClassifier( [('nn', nn), (...), (...)] )
clf.fit(x,y)
, и когда я проверяю параметры класса clf после запуска clf.fit, я получаю это - здесь левая рука - это выполнение кода, правая сторона знака равенства - возвращаемое значение как после запуска clf.fit (). Другими словами, это не операторы присваивания в моем коде. Это просто сохраненные значения после запуска fit (), показывающие, что клонированные копии, которые являются подогнанными оценщиками, больше не содержат значения для значения параметра. С другой стороны, параметр 'metric' работает нормально.
print(clf.estimators[0][1].parameter) #returns 'some_string'
print(clf.estimators_[0][1].parameter) #returns {NoneType} None
print(clf.estimators[0][1].metric) #returns 'accuracy'
print(clf.estimators_[0][1].metric) #returns 'accuracy'
Любая причина, почему это может происходить? Это не происходит для всех моих входных параметров, как вы можете видеть. Как и на этапе клонирования clf.fit
, он пропустил один из моих параметров.
И если я вместо этого сделаю это в своем классе TF_NN init :
self.parameter = 'some_string'
он отлично работает, когда и оценщики, и оценщики_ показывают правильное значение.
По сути, конечной целью этапа 1 является наличие классификатора голосования, который может использовать тензор потока NN в качестве одного из критериев голосования. Для чего это стоит,
parameter == outputActivation #activation used on output Layer. softmax for multiclass classification.