긍정적인 사고와 행동으로 선한 영향력을 줄 수 있도록

Python

[Python] module 'tensorflow' has no attribute 'placeholder' 에러 해결법

리거니 2022. 2. 9. 18:35

vscode로 tensorflow 를 사용하여 딥러닝 실습을 하던 도중 에러가 발생했다.

 

pip를 사용하여 tensorflow 설치경로 : https://www.tensorflow.org/install/pip?hl=ko

 

기본적으로 tensorflow를 설치하면 2.X 버전을 설치한다

print(tf.__version__)   # 2.8.0

 

 

하지만 placeholder , variable 를 사용할 경우 1.X 버전만 호환이 된다.

 

 

버전을 1.X 버전으로 낮춰보자 !! 

import tensorflow.compat.v1 as tf   # 버전 1 사용
tf.disable_v2_behavior()

 


아래는 TensorFlow 를 활용한 딥러닝 실습 예제이다 



import tensorflow.compat.v1 as tf   # 버전 1 사용
tf.disable_v2_behavior()   

import numpy as np

x_data = np.array(
    [[0,0],[1,0],[1,1],[0,0],[0,0],[0,1]])

y_data = np.array([
    [1,0,0], # 기타
    [0,1,0], # 포유류
    [0,0,1],
    [1,0,0],
    [1,0,0],
    [0,0,1]
])

#######
# 신경망 모델 구성
#######

X = tf.placeholder(tf.float32)
Y = tf.placeholder(tf.float32)

W1 = tf.Variable(tf.random_uniform([2, 10], -1., 1.))
W2 = tf.Variable(tf.random_uniform([10, 3], -1., 1.))

b1 = tf.Variable(tf.zeros([10]))
b2 = tf.Variable(tf.zeros([3]))

L1 = tf.add(tf.matmul(X, W1), b1)
L1 = tf.nn.relu(L1)

model = tf.add(tf.matmul(L1, W2), b2)

cost = tf.reduce_mean(
    tf.nn.softmax_cross_entropy_with_logits_v2(labels=Y, logits=model))

optimizer = tf.train.AdamOptimizer(learning_rate=0.01)
train_op = optimizer.minimize(cost)

############
# 신경망 모델 학습
############

init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)

for step in range(100):
    sess.run(train_op, feed_dict={X: x_data, Y: y_data})
    
    if (step + 1) % 10 == 0:
        print(step + 1, sess.run(cost, feed_dict={X: x_data, Y: y_data}))
        
########
# 결과 확인
# 0: 기타 1: 포유류 2: 조류
########

prediction = tf.argmax(model, 1)
target = tf.argmax(Y, 1)
print('예측값:', sess.run(prediction, feed_dict={X: x_data}))
print('실제값:', sess.run(target, feed_dict={Y: y_data}))

is_correct = tf.equal(prediction, target)
accuracy = tf.reduce_mean(tf.cast(is_correct, tf.float32))

print('정확도: %.2f' % sess.run(accuracy * 100, feed_dict={X: x_data, Y: y_data}))