[python] 경고 : tensorflow : sample_weight 모드가…에서 [ ‘…’] (으)로 강제 변환되었습니다.

사전을 인수로 사용 .fit_generator()하거나 .fit()전달 하여 이미지 분류기를 훈련 class_weight=시킵니다.

TF1.x에서는 오류가 발생하지 않았지만 2.1에서는 훈련을 시작할 때 다음과 같은 결과가 나타납니다.

WARNING:tensorflow:sample_weight modes were coerced from
  ...
    to  
  ['...']

그것은에서 강제 변환 뭔가에 무엇을 의미 하는가 ...['...']?

에이 경고의 소스 tensorflow의 REPO는 여기에 , 배치 의견은 다음과 같습니다 :

sample_weight_modes를 대상 구조로 강제 변환하십시오. 이것은 내재적으로 모델이 내부 표현을 위해 출력을 평탄화한다는 사실에 달려 있습니다.



답변

이것은 가짜 메시지처럼 보입니다. TensorFlow 2.1로 업그레이드 한 후에도 동일한 경고 메시지가 표시되지만 클래스 가중치 또는 샘플 가중치를 전혀 사용하지 않습니다. 다음과 같이 튜플을 반환하는 생성기를 사용합니다.

return inputs, targets

이제 경고를 없애기 위해 다음과 같이 변경했습니다.

return inputs, targets, [None]

이것이 관련이 있는지는 모르지만 모델은 3 개의 입력을 사용하므로 inputs변수는 실제로 3 개의 numpy 배열 목록입니다. targets하나의 numpy 배열입니다.

어쨌든 경고 일뿐입니다. 훈련은 어느 쪽이든 잘 작동합니다.

TensorFlow 2.2 편집 :

이 버그는 TensorFlow 2.2에서 수정 된 것으로 보입니다. 그러나 위의 수정은 TF 2.2에서 실패합니다. 샘플 무게의 모양을 얻으려고 시도하기 때문에 분명히 실패합니다 AttributeError: 'NoneType' object has no attribute 'shape'. 따라서 2.2로 업그레이드 할 때 위 수정을 실행 취소하십시오.


답변

나는 이것이 model.compile()기본 매개 변수 sample_weight_mode=None로 호출 한 다음 model.fit()지정된 sample_weight또는 로 호출 할 때 발생하는 tensorflow의 버그라고 생각합니다 class_weight.

텐서 플로우 저장소에서 :

  • fit() 결국 전화 _process_training_inputs()
  • _process_training_inputs() 세트 sample_weight_modes = [None] 에 기초하여 model.sample_weight_mode = None다음을 생성 DataAdapter하여sample_weight_modes = [None]
  • DataAdapter통화 broadcast_sample_weight_modes()sample_weight_modes = [None]동안 초기화
  • broadcast_sample_weight_modes() 기대 sample_weight_modes = None 하지만 수신[None]
  • 그것은 그것이 주장 [None]에서 다른 구조 sample_weight/ class_weight위로를 덮어 None구조를 맞춤으로써 sample_weight/ class_weight및 경고를 출력

옆의 경고 는에서 로 설정된 fit()것처럼 영향을 미치지 않습니다 .sample_weight_modesDataAdapterNone

tensorflow 설명서sample_weight 에는 numpy-array 여야한다고 명시되어 있습니다. 당신이 호출 할 경우 fit()sample_weight.tolist()대신, 당신은 경고를받지 않습니다하지만 sample_weight자동으로 덮어 쓰기 None할 때 _process_numpy_inputs()호출되는 전처리 하나보다 길이 이상의 입력을 받는다.


답변

Tist 대신 Gist를 가져 와서 Tensorflow 2.0을 설치했으며 그러한 경고없이 작동했습니다.

다음은 완전한 코드 의 요지 입니다. Tensorflow 설치 코드는 다음과 같습니다.

!pip install tensorflow==2.0

성공적인 실행의 스크린 샷은 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

업데이트 : 이 버그는 다음에서 수정되었습니다.Tensorflow Version 2.2.


답변

사전을 제공하는 대신

weights = {'0': 42.0, '1': 1.0}

나는 목록을 시도했다

weights = [42.0, 1.0]

경고가 사라졌습니다.


답변