비버데이터
비버의 Data log
비버데이터
전체 방문자
오늘
어제
  • 분류 전체보기 (24)
    • Contact (1)
    • 회고록 (2)
    • ML&DL (7)
      • ML&DL 공통 (1)
      • NLP (1)
      • Tensorflow (3)
      • Pytorch (2)
    • TIL (13)
      • Python (6)
      • Linux (1)
      • Git (1)
      • 기타 (3)
      • 개발 오류 일지 (1)
    • 자격증&시험 이야기 (0)
    • 기본기 복습 (1)
    • 기타 (0)

블로그 메뉴

  • 홈
  • 관리자

공지사항

인기 글

태그

  • 데이터사이언스
  • float32
  • np.linspace
  • tf.linspace
  • numpy
  • 파이썬
  • Linux
  • mac terminal shell
  • 회고록
  • 딥러닝
  • Python
  • 머신러닝
  • Ai
  • Tensorflow 2.0
  • float64
  • 파이토치
  • pytorch
  • til
  • 깃랩 모델 가중치 파일
  • 깃랩 weight file
  • 어쩌다보니팀내최고연차팀원이된
  • chsh -s /bin/bash
  • 깃랩 모델 파일
  • 깃랩 대용량
  • tensorflow
  • 개발성장일지
  • no changes made
  • batch job scheduling
  • ubuntu
  • 데이터분석

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
비버데이터

비버의 Data log

ML&DL/Pytorch

[파이토치] The given NumPy array is not writeable, and PyTorch does not support non-writeable tensors. This means you can write to the underlying (supposedly non-writeable) NumPy array using the tensor.

2020. 11. 12. 10:29

안녕하세요. 비버입니다!

오늘은 Pytorch(파이토치) 독학을 위해 MNIST 데이터를 실습해볼 예정이었어요. MNIST란 손글씨 이미지 분류를 실습해볼 수 있도록 제공되고 있는 공개 데이터셋을 말해요. Iris(아이리스), Titanic(타이타닉) 처럼 연습용으로 널리 쓰이는 유명한 데이터셋이랍니다. 

어김없이 시작과 함께 오류를 만났는데, 한 번 자세히 뜯어보고 싶단 생각에 글로 정리하게 되었습니다! ㅎㅎ

UserWarning: The given NumPy array is not writeable, and PyTorch does not support non-writeable tensors. This means you can write to the underlying (supposedly non-writeable) NumPy array using the tensor. You may want to copy the array to protect its data or make it writeable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at /pytorch/torch/csrc/utils/tensor_numpy.cpp:141.)
return torch.from_numpy(parsed.astype(m[2], copy=False)).view(*s)

내가 예상하지 않은 출력이 뜨면 일단 살짝 당황스럽기 마련이죠. 다행히 해당 문구는 'UserWarning' 이라는 단어로 시작하고 있어요. 제가 앞서 오류를 만났다고 표현했는데 사실 오류는 아니고, 경고였던 거죠. 무시하고 넘어가도 코드 실행에는 문제가 되지 않겠으나, 사실 꺼림칙하잖아요. 뭘 경고하려고 하는 건지, 내가 혹시 코드에 실수한 거라도 있는 건지.

그래서 왜 이 경고문구가 뜨는지 알아보기로 했답니다. 

참고로 위 경고문구는 아래 코드를 실행했을 때 발생했어요. 

# MNIST 실습을 위해 파이토치로 데이터셋을 편리하게 다운로드 해오는 코드

mnist_train = dsets.MNIST(root='MNIST_data/',
                          train=True,
                          transform=transforms.ToTensor(),
                          download=True)

mnist_test = dsets.MNIST(root='MNIST_data/',
                         train=False,
                         transform=transforms.ToTensor(),
                         download=True)

자, 그럼 경고문구를 찬찬히 하나씩 뜯어볼까요?

우선 영어로 되어 있는 경고문구를 앞부분부터 일부 직역하면,

주어진 Numpy array(Numpy 배열)는 쓰기 불가 상태입니다. 그리고 Pytorch(파이토치)는 쓰기불가(non-writeable) 상태인 텐서들은 지원하지 않습니다. 즉, 당신은 텐서를 이용하여 underlying Numpy array에 쓰기가 가능합니다. 데이터를 보호하거나 그것을 쓰기 상태로 변경하고 싶다면 array를 텐서로 변환하기 전에 그 데이터를 복사해서 이용하세요. 

아하, 감이 잡히네요. 그러니까 제가 다운로드 받은 MNIST 데이터는 현재 '쓰기 불가' 상태라는 거예요. 쓰기불가 상태가 뭔지 정확히는 모르겠지만 말 그대로 직접적인 수정이 불가한 어떤 상태라는 거겠죠. 그리고 이 쓰기불가 상태인 넘파이 배열은 파이토치가 지원하지 않는대요. (참고로 저는 파이토치 1.7.0 버전을 이용하고 있습니다.)

왜?라는 생각이 드는 순간 바로 설명이 이어지네요. '데이터를 보호하거나' 아- 그렇죠. 원본 데이터를 직접 수정하면 나중에 '앗 잘못 수정했네 다시 되돌리고 싶어 ㅠ' 하는 상황이 발생해도 원본 데이터로 쉽게 되돌릴 수 없겠죠. 그러니까 원본 데이터는 직접 수정이 불가한 상태로 해두고 원본 데이터를 하나 복사해서 복사한 데이터를 이용해 이것저것 하는 게 안전하다는 거예요.

아하 아하! 이제 왜 이런 경고문구를 띄웠는지 알 것 같네요. 경고문구의 내용이 영 신경 쓰인다면 데이터의 복사본을 만들어 사용하고, '귀찮다! 원본 데이터는 다시 다운받으면 된다!' 하면 그냥 사용하고 그렇게 하면 되겠네요. 

경고문구는 오류가 아니기 때문에 무시하고 넘어가도 되지만 가끔 이렇게 얘네가 어떤 내용을 말하고자 하는지 유심히 살펴보는 것도 앞으로의 공부에 많은 도움이 될 것 같습니다!

그럼! 비버였습니다! :D

# 참고, 파이토치 버전을 확인하는 코드
import torch
print(torch.__version__)

 

저작자표시 비영리 변경금지

'ML&DL > Pytorch' 카테고리의 다른 글

[파이토치] 머신러닝 Pytorch 모델의 성능을 극대화하는 7가지 팁!  (3) 2021.02.26
    'ML&DL/Pytorch' 카테고리의 다른 글
    • [파이토치] 머신러닝 Pytorch 모델의 성능을 극대화하는 7가지 팁!
    비버데이터
    비버데이터
    포털 서비스 회사에서 Data Scientist 로 일하고 있는 비버입니다.

    티스토리툴바