ValueError: the truth value of Series is ambiguous. Use a.empty, a.any(), a.all() ..... 

 

시리즈나 데이터프레임에서 비교연산을 할 때 위와 같은 에러가 뜨는 경우가 있다. 

대표적으로 위의 상황에서 파이썬 논리연산자인 and나 or 등을 사용하면 위의 에러가 뜨게 된다.

ex) [(df.col < 10) and (df.col > 5)] 와 같은 경우

< 해결방법 >

np.logical_and(or) 을 쓰거나 간단하게 &(|)을 사용하면 된다.

추가로 & 을 쓸 때 실수하는 부분이, 위의 예시에서 (df.col < 10)이 아닌 df.col < 10으로 소괄호가 없이 썻다면

&의 연산자의 우선순위가 높으므로

typeerror cannot compare a dtyped float array with a scalar of type bool

다음과 같은 에러가 뜰것이니 주의하기 바란다.

1. dataframe에서의 object객체

데이터프레임 관련 연산을 넘파이로 하고나서 

df.info()를 해서 각 타입을 확인해보면 데이터가 string이던 float이던간에 object로 바뀐 것을 볼 수 있다.

이는 같은 크기의 메모리 공간을 효율적으로 사용하기 위해서 구성된 넘파이의 계산 방식때문이라고 한다. 

따라서 연산 후 특정 dtype이어야한다면, dtype을 다시 재정의해줄 필요가 있다. 

예를 들면, .astype(), pd.to_numeric과 같이 다시 해주어야한다는...

또한, object객체가 도저히 나올수 없는 상황인데 나왔다면, 데이터가 이상한 것일 수도 있다. 가령 nan값이 껴있다던가... 확인해서 제거해줘야한다


2. dataframe에서 null값 드랍시에 원하는 갯수보다 훨씬 많은 갯수의 행이 삭제되는 경우

df.drop(df[df[col].isna()].index, axis = 0) 를 하는 도중에 index가 정렬된것이아니라 뒤죽박죽인 경우였는데, 6개가 제거되어야 할 것이 800개가 제거가 되었다.

df.reset_index(drop=True)를 해서 다시해보니 정상대로 6개가 삭제되었다.

위의 원인은 찾을 수 없었으나 이왕 사용할거 정렬된 index가 좋지 않겠나 싶다.


pd.read_excel를 이용하여 excel파일을 불러오다가 이런 에러가 떳다.

구글링해서 별다른 해결법은 찾지 못했고, 코멘트 중에 파일이름 또한 확인해보라는 말이 있어서 확인해봤더니 이름뿐만 아니라 손상된 엑셀파일이었다.

 

XLRDError: Unsupported format, or corrupt file: Expected BOF record; found b'\x0fRegiste'

(이런 에러가뜨면 엑셀파일이 제대로 되있는지 확인해볼 필요가 있겠다.)

 

추가로 list가 unique한 값을 가지게 하려면

set함수를 이용하여 집합 객체로 만든 뒤, 다시 list함수를 사용하여 리스트 객체로 변환시키면 된다.

제목 그대로 object detection에서 

class-label은 존재하지만 bounding box-label 은 존재하지 않을 때,

해결 방법으로는 

weakly-supervised Object Localization or learning 의 도메인과

Zero-Shot Learning 이 대표적이라고 한다.

 

아래는 그에 관한 참고 논문.

Zhou, B., Khosla, A., Lapedriza, A., Oliva, A., & Torralba, A. (2016). Learning deep features for discriminative localization. In Proceedings of the IEEE conference on computer vision and pattern recognition (pp. 2921-2929).
Bilen, H., & Vedaldi, A. (2016). Weakly supervised deep detection networks. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (pp. 2846-2854).
Tao, Q., Yang, H., & Cai, J. (2018). Zero-annotation object detection with web knowledge transfer. In Proceedings of the European Conference on Computer Vision (ECCV) (pp. 369-384).

 

- CPU issue

https://github.com/tensorflow/tensorflow/issues/18503 

에 따르면 CPU가 오래된 것일 수록 tensorflow의 고버전을 사용할 수 없습니다.

오래된 것을 어떻게 판단하냐면 AVX feature이라는 기능을 CPU가 지원을 하느냐, 안하느냐로 판단하면 됩니다.

CUDA나 Cudnn, 환경변수 등을 잘 설정했는데도 안되고, 컴퓨터가 오래된 것이라면 한번 의심해보시길 바랍니다. 

위의 저 기능이 없는경우 tensorflow 1.5까지만 사용할 수 있습니다. 

 

- Tensorflow + CUDA version

TensorFlow 1.10 이후의 거의 모든 버전은 CUDA 10 이후를 지원합니다.

 

- python version

Tensorflow 1.5 에서는 python >= 3.6.* 이 안될 때도 있다. (3.5로 설치하니까 해결)

보통 3.6은 Tensorflow 1.6부터라고 생각하면 된다. 

 

또한 TensorFlow 2.0부터는 파이썬 2.x버전을 지원하지 않을 것이라고 한다.