tensorflow 2.0, ニューラルネットワークス: Sinusoidal Fitting, AttributeError: モジュール 'tensorflow' has no attribute 'placeholder' エラー
tensorflowの新規導入、anacondaのインストール、pythonの実行環境のセットアップ、前回のガイドに従って、最初のニューラルネットワークのトレーニング:正弦波フィッティングを入力しました。
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
def gen_data():
x = np.linspace(-np.pi,np.pi,100)
x = np.reshape(x,(len(x),1)) # retransform x to a (100,1) two-dimensional array
y = np.sin(x)
return x,y
INPUT_NODE=1
HIDDEN_NODE=50
OUTPUT_NODE=1
LEARNING_RATE=0.001
def inference(input_tensor):
with tf.name_scope('Layer-1'):
weight = tf.Variable(tf.truncated_normal(shape=[INPUT_NODE,HIDDEN_NODE],stddev=0.1,dtype=tf.float32),name='weight')
# Create the first layer of weight variables, (1,50)
bias = tf.Variable(tf.constant(0,dtype=tf.float32,shape=[HIDDEN_NODE]))
# Set the bias value
l1 = tf.nn.relu(tf.nn.xw_plus_b(input_tensor,weight,bias))
# tf.nn.xw_plus_b(x,w,bias) = x * w + bias
with tf.name_scope('Layer-2'):
weight = tf.Variable(tf.truncated_normal(shape=[HIDDEN_NODE,OUTPUT_NODE],stddev=0.1,dtype=tf.float32),name='weight')
bias = tf.Variable(tf.constant(0,dtype=tf.float32,shape=[OUTPUT_NODE]))
l2 = tf.nn.xw_plus_b(l1,weight,bias)
return l2
def train():
x = tf.placeholder(dtype=tf.float32,shape=[None,INPUT_NODE],name='x-input')
y_ = tf.placeholder(dtype=tf.float32,shape=[None,OUTPUT_NODE],name='y-input')
global_step = tf.Variable(0,trainable=False)
logits = inference(x)
loss = tf.reduce_mean(tf.square(y_-logits)) # mean squared deviation
train_step = tf.train.GradientDescentOptimizer(LEARNING_RATE).minimize(loss,global_step=global_step)
train_x,train_y = gen_data()
np.random.seed(200)
shuffle_index = np.random.permutation(train_x.shape[0])
shuffled_x = train_x[shuffle_index]
shuffled_y = train_y[shuffle_index]
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.plot(train_x,train_y,lw=5,c='r')
plt.ion()
plt.show()
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for i in range(5000000):
feed_dic = {x:shuffled_x,y_:shuffled_y}
_,train_loss = sess.run([train_step,loss],feed_dict=feed_dic)
if (i+1)%1000 == 0:
print('loss at train data: ',train_loss)
try:
ax.lines.remove(lines[0])
except:
pass
y_pre = sess.run(logits,feed_dict={x:train_x})
lines = ax.plot(train_x,y_pre,c='black')
plt.pause(0.1)
if __name__ == '__main__':
train()
エラーが発生したプログラムを実行します。AttributeError: module 'tensorflow' has no attribute 'placeholder'
いろいろ調べた結果、パソコンのtensorflowがバージョン2.0で、プログラムがバージョン1.0をベースにしていることが原因でした。
解決方法
を配置します。
import tensorflow as tf
次の2つの文章に置き換えてください。
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
完璧に動作します。
tensorflow 2.0の1.xと比較した変更点を添付します。
1. 主な変更点の簡単なまとめ
1.1. APIのクリーンアップ
tensorflow 2.0に含まれる多くのAPI
削除または移動
. 大きな変更点としては
tf.app
と
tf.flags
と
tf.logging
を、現在オープンソースの
absl-py
を削除し
tf.contrib
の項目を削除し、メインの
tf.*
のような関数に移動し、あまり使われない関数は
tf.math
のようなサブパッケージがあります。いくつかのAPIは、2.0バージョンと同等のものに置き換えられています。
tf.summary
,
tf.keras.metrics
と
tf.keras.optimizers
.
これらのリネームを自動的に適用する最も簡単な方法は
v2アップグレードスクリプト
.
1.2. イーガー実行
TensorFlow 1.Xでは、イーガー実行を行うために、次のような操作を行う必要があります。
tf.*
API を呼び出して、抽象構文木 (グラフ) を手動でつなぎ合わせます。次に、出力テンソルと入力テンソルのセットを作成し、それらを
session.run()
を使い、手動で抽象構文木をコンパイルする。
TensorFlow 2.0のデフォルトはEager実行モードで、(Pythonが通常行うように)すぐにコードを実行します。2.0では、グラフとセッションは実装の詳細のように動作するはずです。
Eager実行の注目すべき点の1つは、(1)のように
tf.control_dependencies()
すべてのコードは順次実行されるため (
tf.function
で、副作用は書かれた順に実行される)。
1.3. グローバル変数の廃止
TensorFlow 1.Xは、暗黙のグローバル名前空間に大きく依存しています。を呼び出すと
tf.Variable()
を指すPython変数を忘れたとしても、デフォルトのグラフに格納され、そこに留まります。
を復元することができます。
tf.Variable
しかし、その変数が作成された名前がわかっている場合のみ、その変数の作成を制御できない場合は困難です。その結果、ユーザーが自分の変数を再び見つけられるようにする仕組みや、ユーザーが作成した変数を見つけるためのフレームワークを探すことが盛んに行われるようになりました。
tf.get_global_step()
,
tf.global_variables_initializer()
また,オプティマイザは,暗黙のうちにすべての学習可能な変数の勾配を計算する,などです.
TensorFlow 2.0ではこれらの仕組みがすべて削除されています( 変数 2.0 RFC ) をサポートし、デフォルトのメカニズムである変数の追跡をサポートします! もし、tf.Variableの追跡ができなくなったら、それはガベージコレクションされてリサイクルされるでしょう。
トレース変数が必要なため、ユーザーには追加作業が発生しますが、Kerasオブジェクト(下記参照)を使用することで、負担を最小限に抑えることができます。
1.4. セッションではなく、関数
session.run()
呼び出しはほとんど関数呼び出しのように、入力と呼び出す関数を指定し、出力のセットを返します。
TensorFlow2.0では、以下のように
tf.function()
を使用してPython関数を装飾し、JITコンパイル用にマークすることで、TensorFlowが個々のグラフとして実行できるようになります(
ファンクション 2.0 RFC
). この仕組みにより、TensorFlow 2.0は、グラフモデルのすべての利点を得ることができます。
- パフォーマンス:機能の最適化が可能(ノードの刈り込み、カーネルフュージョンなど)
- 移植性:その機能をエクスポート/再インポートできる( SavedModel 2.0 RFC これにより、TensorFlowのモジュール化された機能を再利用、共有することができる。
# TensorFlow 1.X
outputs = session.run(f(placeholder), feed_dict={placeholder: input})
# TensorFlow 2.0
outputs = f(input)
PythonとTensorFlowのコードを自由に補間することで、Pythonの表現力を存分に活かしてもらいたいと考えています。しかし、移植性の高いTensorFlowは、Pythonインタプリタがなくても、モバイル、C++、JSで実行できるため、ユーザは、Pythonに
@tf.function
コードを書き換える際に
オートグラフ
は、PythonのコンストラクトのサブセットをTensorFlowの同等物に変換します。
-
for
/while
->tf.while_loop
(サポートbreak
とcontinue
) -
if
->tf.cond for _ in dataset
-
->
dataset.reduce
AutoGraphは制御フローの任意のネストをサポートしており、シーケンスモデル、強化学習、カスタム学習ループなど、多くの複雑なMLプログラムを効率的かつ簡潔に実装することが可能です。
関連
-
[解決済み】Tensorflow: tf.get_variableはどのように動作するのでしょうか?
-
[解決済み】Tensorflow: tf.expand_dimsはいつ使う?
-
[解決済み] なぜtf.name_scope()を使うのか?
-
[解決済み] WSL2- $nvidia-smi コマンドが実行されない
-
AttributeError: モジュール tensorflow には属性プレースホルダーがありません。
-
AttributeError: モジュール 'tensorflow' には 'placeholder' という属性がないことを解決する。
-
Tensorflowシリーズ:tf.contrib.layers.batch_norm
-
Tensorflowは、'_pywrap_tensorflow_internal'という名前のモジュールがないことを解決する。
-
pycharm using TensorFlow, keras error: modulenotfounderror: no module named tensorflow
-
Bishopの問題2: tf-pose-estimation-master, last ModuleNotFoundError: tensorflow.contrib'という名前のモジュールがありません(解決済み)。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Tensorflowは、Path変数が設定された状態でインストールされているにもかかわらず、「cudart64_90.dll」を見つけることができません。
-
[解決済み] Tensorflowです。tf.expand_dimsはいつ使うの?
-
[解決済み] Anaconda環境からTensorFlowをアンインストールする
-
デバイスから 18.41M (19300352 bytes) の割り当てに失敗しました。CUDA_ERROR_OUT_OF_MEMORY
-
AttributeError: 'list' オブジェクトには 'value' という属性がありません。
-
tensorflow(6) mnist.train.next_batch() 関数解析
-
モジュール 'matplotlib' には、解決すべき属性 'configure' がありません。
-
Tensorflowの実行エラー。tensorflow.contrib'という名前のモジュールがありません。
-
tf.convert_to_tensorを使用したときの値のエラーの解決方法
-
anacondaでtensorflow-gpuをインストールする