본문 바로가기
각종공부/파이썬 오류 해결 & 팁

[파이썬] Tensorflow 2.0 session / placeholder 오류 해결 방법

by 달슬 2020. 7. 4.
반응형

텐서플로우 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))

반응형

댓글