Вы не можете передать простой примитив по ссылке в Python, но вы можете делать такие вещи, как:
def foo(y):
y[0] = y[0]**2
x = [5]
foo(x)
print x[0] # prints 25
. Это странный способ обойти это. Обратите внимание, что в Python вы также можете вернуть более одного значения, что делает некоторые из вариантов использования для передачи по ссылке менее важными:
def foo(x, y):
return x**2, y**2
a = 1
b = 2
a, b = foo(a, b) # a == 2; b == 4
Когда вы возвращаете такие значения, они возвращаются как Кортеж, который, в свою очередь, распакован.
edit: Другой способ подумать об этом заключается в том, что, хотя вы не можете явно передавать переменные по ссылке в Python, вы можете изменить свойства объектов, которые были переданы. В моем примере (и других) вы можете изменить членов списка, который был передан. Однако вы не сможете переназначить переданную в переменной полностью. Например, см. Следующие две части кода: они могут сделать что-то подобное, но в итоге получаются разные результаты:
def clear_a(x):
x = []
def clear_b(x):
while x: x.pop()
z = [1,2,3]
clear_a(z) # z will not be changed
clear_b(z) # z will be emptied
Вы хотите разделить свои данные на обучающие и тестовые наборы. Для этого вы можете либо
вручную, либо с помощью сценария отдельно обучать и тестировать папки и загружать их для обучения с помощью генератора данных.
Загрузка целых данных и разделение их для обучения и проверки в памяти.
Давайте обсудим второй вариант.
главный каталог содержит 40 подкаталогов
blockquote>Предположим, что ваш главный каталог -
Train//
, и есть40
подпапок, а именно1-40
. Кроме того, я предполагаю, что метка класса - это имя папки.# imports import cv2 import numpy as np import os from sklearn.model_selection import train_test_split # seed for reproducibility SEED = 44000 # lists to store data data = [] label = [] # folder where data is placed BASE_FOLDER = 'Train//' folders = os.listdir(BASE_FOLDER) # loading data to lists for folder in folders: for file in os.listdir(BASE_FOLDER + folder + '//'): img = cv2.imread(BASE_FOLDER + folder + '//' + file) # do any pre-processing if needed like resize, sharpen etc. data = data.append(img) label = label.append(folder) # now split the data in to train and test with the help of train_test_split train_data, test_data, train_label, test_label = train_test_split(data, label, test_size=0.2, random_state=SEED)