*2.0에서 달라지는 부분이 매우 많으므로 다시 한 번 훑어보면서 쓰는 건지 안 쓰는 건지 확인해야 함!!
tf.floor(x)
- x의 요소별로 그 요소보다 크지 않은 정수 반환
@tf.function
- 함수를 호출가능한 tensorflow graph 객체로 컴파일하는 데코레이터
tf.GradientTape
tf.name_scope
- 편의함수 정의할 때 사용하는 것을 봤다.
- 텐서, 변수, 플레이스홀터 등 이러한 변수를 관리하기 위한 간단한 범위 지정 메커니즘을 제공
- 텐서보드에서 시각화할 때 유용, 자동으로 그래프 원소들이 그룹화됨
tf.device
with tf.device('/gpu:0'):
...
- with문으로 작성하여 수동으로 디바이스 배치하기 → 해당 컨텍스트 내 모든 작업이 동일한 장치로 할당된다.
- “/cpu:0” : 서버의 CPU를 지정함
- “/gpu:0” : 서버의 첫번째 GPU를 지정함
- “/gpu:1” : 서버의 두번째 GPU를 지정함. 유사한 방식으로 계속 지정.
tf.get_default_graph() (더이상 사용하지 않음)
self.scope = tf.get_default_graph().unique_name(self.name.replace('/', '_'), mark_as_used=False)
- tensorflow 모듈을 import하면 내부적으로 디폴트 그래프가 생성되는데, 현재 스레드의 디폴트 그래프를 반환
- unique_name : 전에 이미 사용된 이름이라면 unique하게 만들어줌
- mark_as_used : 사용되는 이름인지 표시
tf.variable_scope
tf.get_variable()에 전달된 이름의 네임스페이스를 관리
tf.get_variable vs. tf.Variable
- Variable : 언제나 새로운 객체를 생성하며, 같은 이름의 객체가 이미 있으면 _1, _2 붙이는 식으로 생성
- get_variable : 이 이름을 가진 객체가 존재하는지 검색하고, 없으면 넘겨받은 shape와 initializer로 새로 만든다
*tensorflow의 namespace https://eyeofneedle.tistory.com/17
tf.global_variables
- 앞서 정의한 변수들을 가져옴
tf.group(*ops)
c = tf.group(a, b)
# 아래와 같다
with tf.control_dependencies([a, b]):
c = tf.no_op()
tf.control_dependencies(control_inputs)
- “Context 안에서 정의된 Operation이 Running되기 “전“에 “먼저“ 실행시켜줄 친구들을 control inputs으로 넣어주면 먼저 실행해준다는 의미다.”
- https://www.stand-firm-peter.me/2018/09/07/tf-identity/ 참고
tf.no_op
- 하는 거 없고 edge들 통제하는 placeholder로만 씀
tf의 initializer
- tf.random_normal_initializer : 주어진 평균과 표준편차를 따르는 정규분포로부터 샘플링된 값을 가지는 tensor 생성
tf.clip_by_value(t, clip_value_min, clip_value_max)
- 텐서 t의 요소값이 clip_value_min보다 작으면 clip_value_min으로 설정하고, clip_value_max보다 크면 clip_value_max으로 설정
tf.identity
- 주어진 텐서와 동일한 내용물과 모양의 텐서를 생성
tf.cond(pred, true_fn, false_fn)
- “tensorflow는 session이 돌기 전까진 그래프를 그리는 과정이라 각각 value가 정해지지 않아, if와 같은 연산이 불가능하다.” 이때 tf.cond를 쓸 수 있다. https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=worb1605&logNo=221280781404
- pred가 참일 경우 true_fn, 거짓일 경우 false_fn
- lambda 함수가 들어감
tf.concat([t1, t2], axis)
# (2, 3)
t1 = [[1, 2, 3],
[4, 5, 6]]
t2 = [[7, 8, 9],
[10, 11, 12]]
axis = 0 이면
# (4, 3)
[[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[10, 11, 12]]
axis = 1 이면
# (2, 6)
[[1, 2, 3, 4, 5, 6],
[7, 8, 9, 10, 11, 12]]
tf.cast(x, dtype)
- tensor를 새로운 형태(두번째 인자인 dtype)로 캐스팅
tf.Tensor.set_shape vs. tf.reshape(x)
- "tf.Tensor.set_shape() 메소드는 Tensor 오브젝트의 정적 쉐이프를 업데이트 한다. 그리고 전형적으로 쉐이프를 직접 추론할 수 없을 때 추가 쉐이프 정보를 제공하기 위해 사용한다. 이는 텐서의 동적 쉐이프를 변경하지 않는다.
- tf.reshape() 오퍼레이션은 다른 동적 쉐이프의 새로운 텐서를 생성한다.”
tensorflow op (텐서플로우 오퍼레이션)
- 텐서 객체를 계산하는 노드
tf.placeholder(dtype, shape=None, name=None)
- 변수 값을 던져 줄 공간을 준비해놓기
'인공지능 > 머신러닝-딥러닝' 카테고리의 다른 글
파이토치(PyTorch) 이해하기 with MNIST (0) | 2022.11.24 |
---|---|
텐서플로우(TensorFlow)에서 파이토치(PyTorch)로 환승하기 (1) | 2022.11.24 |
ASAM (pending) (0) | 2022.08.10 |
Tensorflow (0) | 2022.08.10 |
01. numpy 기초 (0) | 2021.05.02 |