반응형
텐서플로우 1.0에서 텐서플로우 2.0으로 넘어오면서 session과 placeholder가 사라졌습니다.
그래서 Tensorflow 1.0 으로 짜여진 코드로 돌리는 경우
<Session 에러>
AttributeError: module 'tensorflow' has no attribute 'Session'
<placeholder 에러>
ttributeError: module 'tensorflow' has no attribute 'placeholder'
위와 같은 에러를 접할 수 있습니다.
먼저, Session은 Tensorflow 2.0에서 이렇게 바꼈습니다.
<과거 Tensorflow 1.0에서의 Session 코드>
import tensorflow as tf
node1 = tf.constant(3.0)
node2 = tf.constant(4.0)
node3 = tf.add(node1, node2)
sess = tf.Session()
print(sess.run([node1, node2]))
print(sess.run(node3))
<Tensorflow 2.0에서의 Session 대체 코드>
import tensorflow as tf
node1 = tf.constant(3.0)
node2 = tf.constant(4.0)
node3 = tf.add(node1, node2)
tf.print(node1, node2)
tf.print(node3)
다음으로, placeholder는 Tensorflow 2.0에서 이렇게 바꼈습니다.
<과거 Tensorflow 1.0에서의 placeholder 코드>
import tensorflow as tf
a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
adder_node = a + b
print(sess.run(adder_node, feed_dict={a:3, b:4.5}))
<Tensorflow 2.0에서의 placeholder 대체 코드>
import tensorflow as tf
import numpy as np
@tf.function
def adder(a, b):
return a + b
A = tf.constant(1)
B = tf.constant(2)
print(adder(A, B))
C = tf.constant([1, 2])
D = tf.constant([3, 4])
print(adder(C, D))
E = tf.constant([[1, 2, 3], [4, 5, 6]])
F = tf.constant([[2, 3, 4], [5, 6, 7]])
print(adder(E, F))
세션과 플레이스홀더를 사용하지 않고, @tf.function을 통해 함수를 정의함으로써 훨씬 간결하게 처리가 가능합니다.
물론, 간단한 사칙연산은 tensorflow 내장 연산자를 이용하면 훨씬 편합니다.
tf.add: 덧셈
tf.subtract: 뺄셈
tf.multiply: 곱셈
tf.divide: 나눗셈
tf.pow: n-제곱
tf.negative: 음수 부호
tf.abs: 절대값
tf.sign: 부호
tf.round: 반올림
tf.math.ceil: 올림
tf.floor: 내림
tf.math.square: 제곱
tf.math.sqrt: 제곱근
tf.maximum: 두 텐서의 각 원소에서 최댓값만 반환.
tf.minimum: 두 텐서의 각 원소에서 최솟값만 반환.
tf.cumsum: 누적합
tf.math.cumprod: 누적곱
import tensorflow as tf
# tf.add: 덧셈
print(tf.add(2,3))
# tf.subtract: 뺄셈
print(tf.subtract(2,3))
# tf.multiply: 곱셈
print(tf.multiply(2,3))
# tf.divide: 나눗셈
print(tf.divide(2,3))
# tf.pow: n-제곱
print(tf.pow(2,3))
# tf.negative: 음수 부호
print(tf.negative(2))
# tf.abs: 절대값
print(tf.abs(-2))
# tf.sign: 부호
print(tf.sign(-2))
# tf.round: 반올림
print(tf.round(1.2))
# tf.math.ceil: 올림
print(tf.math.ceil(1.2))
# tf.floor: 내림
print(tf.floor(1.2))
# tf.math.square: 제곱
print(tf.math.square(-2))
# tf.math.sqrt: 제곱근
A = tf.constant(4, tf.float32)
print(tf.math.sqrt(A))
# tf.maximum: 두 텐서의 각 원소에서 최댓값만 반환.
print(tf.maximum(2, 3))
# tf.minimum: 두 텐서의 각 원소에서 최솟값만 반환.
print(tf.minimum(2, 3))
# tf.cumsum: 누적합
x = tf.constant([2, 4, 6, 8])
print(tf.cumsum(x))
# tf.math.cumprod: 누적곱
x = tf.constant([2, 4, 6, 8])
print(tf.math.cumprod(x))
반응형
'각종공부 > 파이썬 오류 해결 & 팁' 카테고리의 다른 글
[파이썬] pytoch mnist urllib.error.HTTPError: HTTP Error 503: Service Unavailable (1) | 2021.03.23 |
---|---|
[파이썬] 행렬에 행 추가 & 행 합치기 하는 방법(numpy.vstack) (0) | 2020.06.27 |
[파이썬] xlwings 모듈 com_error: (-2147352570, '알 수 없는 이름입니다.', None, None) 오류 해결 방법 (0) | 2020.01.07 |
[파이썬] 데이터프레임에서 해당 열의 값을 그룹별로 행의 갯수를 세는 방법 (0) | 2020.01.06 |
[파이썬] csv 데이터프레임에서 문자열 분리 & 특정 위치 문자열 추출하는 방법 (0) | 2020.01.05 |
댓글