728x90

Batch_size에 따라, 혹은 미리 데이터를 전처리 할 때, sequential 한 데이터셋에 대해 maximum length를 구해야 할 때가 있다.

 

이후에 Zero padding 까지 해주어야 하는데, 이번 글에서는 maximum length 구하는 것만 다룬다.

 

아주 직관적이고 쉬운 코드로 가겠다.

 

import numpy as np

a = np.random.rand(1, 7)
b = np.random.rand(1, 20)
c = np.random.rand(1, 3)
d = np.random.rand(1, 50)

print('a {}, a shape {}'.format(a, a.shape))
print('b {}, b shape {}'.format(b, b.shape))
print('c {}, c shape {}'.format(c, c.shape))
print('d {}, d shape {}'.format(d, d.shape))

dataset = list()
dataset.append(a)
dataset.append(b)
dataset.append(c)
dataset.append(d)

2차원 데이터에 대해, 예를 들어 text 라고 가정하겠다. ['안', '녕', '하', '세', '요'] 라고 되어 있는 데이터셋은 (1,5)의 shape을 갖는다. 이 데이터셋들을 전체로 모아서 처리할 땐 glob 등을 사용하지만, 예시에서는 4개를 임의로 세팅하고 dataset.append 을 이용하여 7, 20, 3, 50의 길이를 갖는 데이터셋을 임의적으로 만들었다.

 

def target_length_(p):
    return len(p[0])

length = list()
for i in range(len(dataset)):
    
    i_th_len = target_length_(dataset[i]) # return length
    length.append(i_th_len)

max_length = np.argmax(length) # find maximum length
print(max_length) # max_length index

maximum_length = length[max_length]
print(maximum_length)

그 뒤, 데이터셋을 매 번 반복하여 위의 target_length_ 함수를 이용해서 원하는 차원의 length를 구하면 된다.

 

2차원, 3차원, 4차원 등 원하는대로 설정하여 maximum length 값을 얻어 올 수 있다.

 

import numpy as np

a = np.random.rand(1, 7)
b = np.random.rand(1, 20)
c = np.random.rand(1, 3)
d = np.random.rand(1, 50)

print('a {}, a shape {}'.format(a, a.shape))
print('b {}, b shape {}'.format(b, b.shape))
print('c {}, c shape {}'.format(c, c.shape))
print('d {}, d shape {}'.format(d, d.shape))

dataset = list()
dataset.append(a)
dataset.append(b)
dataset.append(c)
dataset.append(d)

def target_length_(p):
    return len(p[0])

length = list()
for i in range(len(dataset)):
    
    i_th_len = target_length_(dataset[i]) # return length
    length.append(i_th_len)

max_length = np.argmax(length) # find maximum length
print(max_length) # max_length index

maximum_length = length[max_length]
print(maximum_length)
    
728x90

+ Recent posts