データはbostonデータセットを用います。
Python
1from sklearn.datasets import load_boston 2from sklearn.model_selection import train_test_split 3boston = load_boston() 4X_train, X_test, y_train, y_test = X_train, X_test, y_train, y_test = train_test_split(boston['data'], boston['target'], test_size=0.3, random_state=0) 5 6X_train = X_train.astype(np.float32) 7X_test = X_test.astype(np.float32) 8y_train = y_train.astype(np.float32) 9y_test = y_test.astype(np.float32)
最適化を下記で実行します。
Python
1# 回帰係数の定義 2W = tf.Variable(tf.random_uniform([1], -1.0, 1.0)) 3# 定数項の定義 4b = tf.Variable(tf.zeros([1])) 5# 回帰式の定義 6y = W * X_train[:,0] + b 7 8# 損失関数の定義 9loss = tf.reduce_mean(tf.square(y - y_train)) 10# 最適化基準の定義 11optimizer = tf.train.GradientDescentOptimizer(0.5) 12train = optimizer.minimize(loss) 13 14with tf.Session() as sess: 15 # 変数を使う場合は初期化が必要 16 sess.run(tf.global_variables_initializer()) 17 # 学習開始 18 for step in range(201): 19 W_new = sess.run(W) 20 b_new = sess.run(b) 21 sess.run(train) 22 if step % 20 == 0: 23 print(step, sess.run(W), sess.run(b))
出力は
Python
10 [92.415306] [24.678692] 220 [inf] [inf] 340 [nan] [nan] 460 [nan] [nan] 580 [nan] [nan] 6100 [nan] [nan] 7120 [nan] [nan] 8140 [nan] [nan] 9160 [nan] [nan] 10180 [nan] [nan] 11200 [nan] [nan]
となります。
しかし、下記の様にデータを生成してやると、うまくいきます。
Python
1X_train = X_train.astype(np.float32)/100 2X_test = X_test.astype(np.float32)/100 3y_train = y_train.astype(np.float32)/100 4y_test = y_test.astype(np.float32)/100
GradientDescentOptimizerってそんな計算方法でしたっけ?(1より大きかったら発散するみたいな?NNの計算時だけではなかったですか?)Tensorflowでは、入力データは正規化しないといけないとかですか?
よくわかりません。よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/05 08:48