Closed skdlfjl closed 3 years ago
@junepass6 아 그리고 지윤님 #29 의
ERROR_01 : Skipping 되는 문제 발생
까지만 해도 Epoch 1번 돌아간다고 하셨는데 혹시 해당 문제 해결한 뒤에도 (shape에러 나는 현 시점) Epoch 1번 돌아가나요??
@junepass6 아 그리고 지윤님 #29 의
ERROR_01 : Skipping 되는 문제 발생
까지만 해도 Epoch 1번 돌아간다고 하셨는데 혹시 해당 문제 해결한 뒤에도 (shape에러 나는 현 시점) Epoch 1번 돌아가나요??
지금은 안 돌아갑니다.ㅜ
print("확인용 1")
변수들을 초기화하고 저장된 ckpt 파일이 있으면 저장된 파라미터를 불러옵니다.
sess.run(tf.global_variables_initializer()) print("확인용 2") ckpt = tf.train.get_checkpoint_state(FLAGS.logs_dir)
tf.flags.DEFINE_string("logs_dir", "logs/", "path to logs directory")
print("확인용 3") print(ckpt) print(type(ckpt)) print("확인용 4")
제가 확인하려면 이 코드 어디에 작성해야하나요?
제가 확인하려면 이 코드 어디에 작성해야하나요?
FCN.py의 main()함수 안에 있는
sess.run(tf.global_variables_initializer())
ckpt = tf.train.get_checkpoint_state(FLAGS.logs_dir)
이 코드 아래에 적어주심 됩니다
ERROR_01 : Skipping 되는 문제 발생
까지만 해도 Epoch 1번 돌아간다고 하셨는데 혹시 해당 문제 해결한 뒤에도 (shape에러 나는 현 시점) Epoch 1번 돌아가나요??
지금은 안 돌아갑니다.ㅜ
batch_size는 FCN.py에서 tf.flags.DEFINE_integer("batch_size", "2", "batch size for training")
로 정의해뒀습니다.
전에 Epoch가 한번 돌아갔던 이유는 단순히 데이터가 들어가지 않아서,
즉, 해당 함수의 self.images.shape[0]값이 0이었기 때문에
if self.batch_offset > self.images.shape[0]:
구문을 만족시켜서 돌아갔던 것으로 확인이 됩니다.
아래는 BatchDatsetReader.py의 next_batch(self, batch_size) 함수입니다. if문을 만족시켜야 Epochs completed가 출력됩니다.
# batch_size만큼의 다음 배치를 가져옵니다.
def next_batch(self, batch_size):
start = self.batch_offset
self.batch_offset += batch_size
# 한 epoch의 배치가 끝난 경우 batch index를 처음으로 다시 설정합니다.
print('----------------------------------------------------------------')
#print(self.images)
print(self.images.shape[0])
if self.batch_offset > self.images.shape[0]:
# 한 epoch이 끝났습니다.
self.epochs_completed += 1
print("****************** Epochs completed: " + str(self.epochs_completed) + "******************")
# 데이터를 섞습니다.(Shuffle)
perm = np.arange(self.images.shape[0])
np.random.shuffle(perm)
self.images = self.images[perm]
self.annotations = self.annotations[perm]
# 다음 epoch을 시작합니다.
start = 0
self.batch_offset = batch_size
FCN.py의 main()함수 안에서 세션을 열고
sess.run(tf.global_variables_initializer())
로 변수를 초기화 할 때 나오는 메세지입니다. 로그 레벨이 E가 아닌 W이기는 한데 찾아보니 GPU 메모리가 부족한거라고.. ㄱ-;; batch size를 줄여서 해보거나 network를 줄이거나 input size를 줄이거나 gpu를 바꿔야 한다고 합니다 (주워들은거라 정확하지 X)@junepass6 혹시 지윤님도 이렇게 뜨나요?? 이 코드 이후에 바로 아래와 같은 사이즈 에러 뜹니다 ValueError: Cannot feed value of shape (2, 224, 224, 3) for Tensor 'annotation:0', which has shape '(?, 224, 224, 1)'
그리고 ckpt 값이 None으로 찍히네요.
tf.train.get_checkpoint_state(saved_dir_path)
를 이용해서 Checkpoint State Protocol Buffer 를 이용할 수 있습니다. Checkpoint State Protocol Buffer에는 두가지 정보가 담겨있음