왜 지금의 TF가 NumPy처럼 느껴지는지
TF 2.x는 default로 eagerly 실행해 — 모든 op이 즉시 돌고 concrete tensor 반환, .numpy()로 들여다볼 수 있어. graph 컴파일러가 아니라 그냥 Python처럼 느껴지는 이유.
NumPy 호환은 양방향 매끄러워. TF op는 NumPy array를 암묵적으로 받고, TF tensor는 NumPy __array__ 프로토콜 구현해서 변환 없이 NumPy 함수에 그대로 들어가. 명시적 변환은 tf.convert_to_tensor랑 .numpy().
.numpy() 예외:
.numpy() 메서드는 eager mode에서만 작동. @tf.function 안에선 tensor가 symbolic이라 trace 시점에 concrete value 없고 .numpy()는 에러. tf.print() 써.