Как разделить набор данных на обучение и тестирование на основе количества клиентов с помощью «Федеративного обучения»
Я пытаюсь использовать
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:]