#python #tensorflow #keras #reshape
#питон #тензорный поток #keras #изменить форму
Вопрос:
Я изо всех сил пытаюсь изменить свой образ. Который имеет размерность (100,100,3). Общий массив для всех изображений составляет (3267, 100, 3)
def get_batch(batch_size,s="train"):
"""Create batch of n pairs, half same class, half different class"""
if s == 'train':
X = Xtrain
X= X.reshape(-1,100,100,3)
#X= X.reshape(-1,20,105,105)
categories = train_classes
else:
X = Xval
X= X.reshape(-1,100,100,3)
categories = val_classes
n_classes, n_examples, w, h, chan = X.shape
print(n_classes)
print(type(n_classes))
print(n_classes.shape)
# randomly sample several classes to use in the batch
categories = rng.choice(n_classes,size=(batch_size,),replace=False)
# initialize 2 empty arrays for the input image batch
pairs=[np.zeros((batch_size, h, w,1)) for i in range(2)]
# initialize vector for the targets
targets=np.zeros((batch_size,))
# make one half of it '1's, so 2nd half of batch has same class
targets[batch_size//2:] = 1
for i in range(batch_size):
category = categories[i]
idx_1 = rng.randint(0, n_examples)
pairs[0][i,:,:,:] = X[category, idx_1].reshape(w, h, chan)
idx_2 = rng.randint(0, n_examples)
# pick images of same class for 1st half, different for 2nd
if i >= batch_size // 2:
category_2 = category
else:
# add a random number to the category modulo n classes to ensure 2nd image has a different category
category_2 = (category rng.randint(1,n_classes)) % n_classes
pairs[1][i,:,:,:] = X[category_2,idx_2].reshape(w, h,1)
return pairs, targets
Однако при попытке изменить форму массива pairs[0][i,:,:,:] = X[category, idx_1].reshape(w, h, chan)
я всегда получаю сообщение об ошибке, что размер массива 300 не может быть преобразован в (100,100,3). Честно говоря, я не вижу проблемы, почему так должно быть…
Кто-нибудь может мне помочь?
Ответ №1:
вам нужен массив из 300 в 100,100,3. этого не может быть, потому (100*100*3)=30000
что и 30000 not equal to 300
вы можете изменить форму только в том случае, если выходная форма имеет такое же количество значений, что и входные.
я предлагаю вам сделать (10,10,3)
это вместо этого, потому что (10*10*3)=300