import  numpy as np

def data_iter_random(data_indices, num_steps, batch_size):
    example_size = len(data_indices)/num_steps
    epoch_size = example_size/batch_size
    example = [data_indices[i*num_steps:i*num_steps + num_steps] 
              for i in range(int(example_size))]
    shuffle_example = np.random.shuffle(example)
    print(shuffle_example)


data_iter_random(list(range(30)), 5, 2)

Выход None

Может кто-нибудь сказать мне, что не так?

2
yangze zhao 24 Окт 2018 в 05:54

2 ответа

Лучший ответ

Проблема в том, что np.random.shuffle изменяет последовательность на месте. Из документации:

Измените последовательность на месте, перетасовывая ее содержимое.

Просто напечатайте example:

import numpy as np


def data_iter_random(data_indices, num_steps, batch_size):
    example_size = len(data_indices) / num_steps
    epoch_size = example_size / batch_size
    example = [data_indices[i * num_steps:i * num_steps + num_steps]
               for i in range(int(example_size))]
    np.random.shuffle(example)
    print(example)


data_iter_random(list(range(30)), 5, 2)

< Сильный > Выход

[[25, 26, 27, 28, 29], [5, 6, 7, 8, 9], [0, 1, 2, 3, 4], [20, 21, 22, 23, 24], [15, 16, 17, 18, 19], [10, 11, 12, 13, 14]]
0
Dani Mesejo 24 Окт 2018 в 02:56

Это потому, что np.random.shuffle - это метод "на месте".

  • так что не нужно назначать

  • делает это на месте

  • Документы говорят: «Измените последовательность на месте, перетасовывая ее содержимое».

Ну действуй:

np.random.shuffle(example)
print(example)

Для этих строк.

Полный код:

import  numpy as np

def data_iter_random(data_indices, num_steps, batch_size):
    example_size = len(data_indices)/num_steps
    epoch_size = example_size/batch_size
    example = [data_indices[i*num_steps:i*num_steps + num_steps] 
              for i in range(int(example_size))]
    np.random.shuffle(example)
    print(example)


data_iter_random(list(range(30)), 5, 2)

Выход:

[[5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [25, 26, 27, 28, 29], [15, 16, 17, 18, 19], [0, 1, 2, 3, 4], [20, 21, 22, 23, 24]]

Таких функций очень мало.

0
U10-Forward 24 Окт 2018 в 02:59
52960442