사전을 인수로 사용 .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_modes
DataAdapter
None
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]
경고가 사라졌습니다.
답변
