Как разделить набор данных на обучение и тестирование на основе количества клиентов с помощью «Федеративного обучения»

Я пытаюсь использовать np.array.split разбить набор данных на 2 части, но это не работает

Надеюсь, кто-нибудь может дать совет по этому вопросу

      x` (images tensor) and `y` (labels) should have the same length. Found: x.shape = (14218, 32, 32, 3), y.shape = (2, 7109, 10)

Часть кода

      y_train = utils.to_categorical(y_train_data, number_of_classes)  # one-hot encoding
y_test = utils.to_categorical(y_test_data, number_of_classes)   # one-hot encoding
# 查看一个类别样本
print('对应类别为7\n', y_train[1])

'''clients_num = 2
X_train = np.array_split(X_train, clients_num)
y_train = np.array_split(y_train, clients_num)
print(np.shape(y_train))'''

input_shape = (img_rows, img_cols, 1)

rgb_batch = np.repeat(X_train_data[..., np.newaxis], 3, -1)
rgb_batch1 = np.repeat(X_test_data[..., np.newaxis], 3, -1)

X_train = tf.image.resize(rgb_batch, (32, 32))
X_test = tf.image.resize(rgb_batch1, (32, 32))

tf.dtypes.cast(X_train, tf.float32)
tf.dtypes.cast(X_test, tf.float32)

X_train /= 255.0
X_test /= 255.0

1 ответ

Решение

Если я правильно понимаю, у вас X_train и Y_trainкоторые представляют собой массивы numpy, представляющие ваш набор данных. Если вы хотите разделить его на случайные части, вы можете, например, перетасовать наборы данных, а затем взять первую перетасованную часть для 1-го клиента и вторую для второго клиента:

      rand_indexes= np.arange(len(X_train))
np.random.shuffle(rand_indexes)
X_rand  = X_train[rand_indexes]
Y_rand  = Y_train[rand_indexes]
X_1_train = X_rand[0:num_samples_1]
Y_1_train = Y_rand[0:num_samples_1]
X_2_train = X_rand[num_samples_1:]
Y_2_train = Y_rand[num_samples_1:]
Другие вопросы по тегам