Аргумент функции как Ложь и Истина - PullRequest
0 голосов
/ 29 августа 2018

Я хочу понять следующий фрагмент кода. В объектно-ориентированной части одним из аргументов является one_hot= one_hot. Но если я вызываю функцию extract_labels с one_hot=one_hot, она не работает. Я обязан использовать операторы True и False. Может кто-нибудь, пожалуйста, направьте меня, почему это так? И что эти True и False указывают. Я напечатал результат, когда использую one=True при вызове функции extract_label, она печатает один горячий вектор.

#Functions
def dense_to_one_hot(labels_dense, num_classes=2):

    num_labels = labels_dense.shape[0]
    index_offset = numpy.arange(num_labels) * num_classes
    labels_one_hot = numpy.zeros((num_labels, num_classes))
    labels_one_hot.flat[index_offset + labels_dense.ravel()] = 1
    return labels_one_hot
def extract_labels(labels, one_hot=False):
    if one_hot :
        return dense_to_one_hot(labels)
    return labels

#Object oriented part
def read_data_sets(all_width_dir,width_dir, one_hot=False):
    class DataSets(object):
    pass
    data_sets = DataSets()
    train_labels = extract_labels(TRAIN_LABELS, one_hot=one_hot)
    test_labels = extract_labels(TEST_LABELS, one_hot=one_hot)

return data_sets

train_label = np.load("./Input/1.5/train_label.npy")
labels = extract_labels(train_label, one_hot=one_hot)
print(labels)

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Когда пользователь вызывает , функция read_data_sets() определяется как

def read_data_sets(all_width_dir,width_dir, one_hot=False):

может, но не нужно предоставлять значение для последнего параметра, поскольку это ключевой параметр - с ключом one_hot и значением по умолчанию False. В обоих случаях параметр one_hot будет иметь значение - предоставлено или по умолчанию.

Теперь давайте рассмотрим последние две строки в полном определении этой функции:

def read_data_sets(all_width_dir,width_dir, one_hot=False):
    class DataSets(object):
    pass
    data_sets = DataSets()
    train_labels = extract_labels(TRAIN_LABELS, one_hot=one_hot)
    test_labels = extract_labels(TEST_LABELS, one_hot=one_hot)

Оба они вызывают функцию extract_labels(), и оба предоставляют значение для параметра с ключом имя ключа one_hot. Предоставленное значение - это содержимое переменной one_hot - это параметр (определенной в настоящее время) функции read_data_sets(), и, как я уже упоминал в начале, оно имеет некоторое значение - предоставляется вызывающим абонентом или по умолчанию one (False).


Примечание:
Немного сбивает с толку то, что в параметре one_hot=one_hot одинаковое имя для клавиши - слева - и для предоставленного значения справа.)


Но после определения функций, i. е. на уровне модуля нет переменной с именем one_hot - это имя было local для определения функции.

Итак, у вас есть вызов функции

labels = extract_labels(train_label, one_hot=one_hot)

предоставляет значение для ключевого параметра либо напрямую (например, one_hot=True), либо косвенно по переменной, которому вы заранее назначаете значение (например, xyz = True, а затем в вызове функции используйте one_hot=xyz), либо принять значение по умолчанию (False) с помощью , полностью пропуская ключевой параметр:

labels = extract_labels(train_label)
0 голосов
/ 29 августа 2018

Функция extract_labels имеет 2 аргумента:

  • метки - обязательно, не имеет значения по умолчанию
  • one_hot - необязательно, значение по умолчанию False

Чтобы вызвать extract_lablels, например, one_hot = one_hot, необходимо указать переменную one_hot перед

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...