TensorFlow에서 "훼이크"양자화 함수 중 하나를 내 텐서 중 하나에 적용하고 싶습니다. 구체적으로 나는 this 기능을 사용하여에 관심이 있어요 : 그것은 상자 밖으로 잘 작동실행 시간에 다른 텐서를 수정하기 위해 텐서 값을 사용하십시오.
fake_quant_with_min_max_args(
inputs,
min=-6,
max=6,
num_bits=8,
narrow_range=False,
name=None
)
. 이상적으로 입력 텐서에 따라 min
및 max
인수를 조정하고 싶습니다. 구체적으로, 범위를 정의하려면 99.7% rule을 사용하고 싶습니다. 즉, 입력 된 텐서를 1 차원 벡터로 표현하면 그 요소의 99.7 %가 [평균 -3 * 표준, 평균 +3 * 표준] 사이에 놓이는 값의 범위를 사용하고자합니다. 범위. 이를 위해
def smartFakeQuantization(tensor):
# Convert the input tensor to a 1-d tensor
t_1d_data = tf.reshape(tensor,[tf.size(tensor), 1])
# get the moments of that tensor. Now mean and var have shape (1,)
mean, var = tf.nn.moments(t_1d_data, axes=[0])
# get a tensor containing the std
std = tf.sqrt(var)
< some code to get the values of those tensors at run-time>
clip_range = np.round([mean_val - 3*std_val, mean_val + 3*stdstd_val], decimals=3)
return tf.fake_quant_with_min_max_args(tensor, min=clip_range[0], max=clip_range[1])
내가 수행하여 그래프의 모든 텐서를 평가할 수 있다는 것을 알고 myTensor.eval()
또는 mySession.run(myTensor)
을하지만 난 그 위에 옆에 라인 내 기능을 그 종류를 추가하는 경우 그래프를 실행할 때 충돌합니다. 다음 형식의 오류가 발생합니다.
텐서 < ...> 가져올 수 없음으로 표시되었습니다.
아마 TensorFlow의 "그래프"특성에 맞는 단계는 아닙니다. 이것이 어떻게 이루어질 수있는 아이디어가 있습니까? 요약하면, 다른 텐서를 수정하기 위해 런타임에 텐서 값을 사용하고 싶습니다. 나는이 문제가 tf.cond()
으로 할 수있는 것보다 더 복잡하다고 말한다.
나는 문제를 조금 좁혔다 고 생각합니다. 그래프가 아직 초기화되지 않았기 때문에이 오류가 발생하는 것 같습니다. 따라서 .eval()을 수행하면 충돌이 발생합니다. – karl71