質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.78%

tensorflowにおける乱数の固定について

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,446

kaoru_

score 10

tensorflowで乱数を発生させているが,固定することが出来ない.

ハイパーパラメータである学習率を4通り考慮した.4回ループを回すことになるが,固定されているはずの乱数が各ループでずれてしまっている.
今後,グリッドサーチを行おうと考えているのでとても困っています.どのように解決すべきでしょうか.
質問・プログラミングについて初心者でりますがお願いします.

発生している問題・エラーメッセージ

0.01
[[-0.01278295]
 [ 0.00424424]
 [ 0.01260157]
 [ 0.00272857]
 [ 0.00025477]
 [-0.00312508]
 [-0.00225875]
 [-0.00445066]
 [ 0.00055921]
 [-0.00066416]
 [ 0.00816493]
 [ 0.00378237]]
0.05
[[-0.00315907]
 [-0.00032044]
 [ 0.00632677]
 [ 0.01084339]
 [ 0.0176496 ]
 [-0.00058672]
 [ 0.00848717]
 [ 0.00399379]
 [ 0.00903138]
 [-0.00502061]
 [-0.00796483]
 [-0.00799216]]
0.1
[[ 0.00535443]
 [ 0.00195984]
 [-0.00651257]
 [-0.00675841]
 [-0.01028436]
 [-0.01944688]
 [-0.00674361]
 [ 0.00747328]
 [-0.00119065]
 [-0.00600063]
 [-0.00499562]
 [ 0.01717699]]
0.25
[[ 0.01153731]
 [-0.0178353 ]
 [ 0.00059123]
 [ 0.01206309]
 [ 0.00179897]
 [-0.00935876]
 [ 0.00936141]
 [-0.00026272]
 [ 0.01812616]
 [-0.00089715]
 [ 0.00351766]
 [-0.00794965]]
[<matplotlib.lines.Line2D at 0x1023ffd0>]

該当のソースコード

import numpy as np
import tensorflow as tf
%matplotlib inline
import matplotlib.pyplot as plt
with tf.Graph().as_default():
    randomseed=1234
    #np.random.seed(randomseed)
    tf.set_random_seed(randomseed)
    n_in = 20
    n_hidden = 12
    #n_hidden = [1,2,3,4,5,6,7,8,9,10]
    n_out = 1
    #学習回数
    epochs=10
    #epochs=[]
    #学習率
    #LEARNING_RATE=0.01
    LEARNING_RATE=[0.01,0.05,0.10,0.25]
    for learn in LEARNING_RATE:
        randomseed=1234
        #np.random.seed(randomseed)
        tf.set_random_seed(randomseed)

    #学習
    #学習モデルの設定
    #tensorflowの定義
        x = tf.placeholder(dtype= tf.float32, shape=[None,n_in], name='x')
        t = tf.placeholder(dtype= tf.float32, shape=[None,n_out], name='t')

    #入力層から中間層
        w21 = tf.Variable(tf.truncated_normal([n_in, n_hidden], stddev=0.01))
        b21 = tf.Variable(tf.zeros([n_hidden]))
        h21 = tf.nn.sigmoid(tf.matmul(x, w21) + b21)
    #中間層から出力層
        w32 = tf.Variable(tf.truncated_normal([n_hidden, n_out], stddev=0.01))
        b32 = tf.Variable(tf.zeros([n_out]))
        y = tf.nn.sigmoid(tf.matmul(h21, w32) + b32)
    #2乗誤差
        loss = tf.reduce_sum(tf.square(y - t))
    #最急降下法
        train_step = tf.train.GradientDescentOptimizer(learn).minimize(loss)
    #ここまでモデルの定義
    #モジュールのインストール

        with tf.Session() as sess:
            randomseed=1234
            #np.random.seed(randomseed)
            tf.set_random_seed(randomseed)
            sess.run(tf.global_variables_initializer())
            randomseed=1234
            #np.random.seed(randomseed)
            tf.set_random_seed(randomseed)

            loss_cal=[]
            print(learn)
            print(sess.run(w32))
       for _ in range(epochs):
             y_out, _ = sess.run([loss, train_step], feed_dict = {
             x: inputdata[:],
             t: outputdata[:]
             })

試したこと

どこに乱数固定のプログラムを書いたとしても固定されない.

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

LEARNING_RATEの繰り返しをw21,w32など乱数の定義より下にすることで乱数の固定は出来ました.
しかし,w21やw32のn_hiddenを何パターンか変える場合同じ手は使えません.

with tf.Graph().as_default():
randomseed=1234
np.random.seed(randomseed)
tf.set_random_seed(randomseed)
n_in = 20
n_hidden = 12

n_hidden = [1,2,3,4,5,6,7,8,9,10]

n_out = 1
epochs=10
x = tf.placeholder(dtype= tf.float32, shape=[None,n_in], name='x')
t = tf.placeholder(dtype= tf.float32, shape=[None,n_out], name='t')

w21 = tf.Variable(tf.truncated_normal([n_in, n_hidden], stddev=0.01))
b21 = tf.Variable(tf.zeros([n_hidden]))
h21 = tf.nn.sigmoid(tf.matmul(x, w21) + b21)
w32 = tf.Variable(tf.truncated_normal([n_hidden, n_out], stddev=0.01))
b32 = tf.Variable(tf.zeros([n_out]))
y = tf.nn.sigmoid(tf.matmul(h21, w32) + b32)
loss = tf.reduce_sum(tf.square(y - t))

LEARNING_RATE=[0.01,0.05,0.10,0.25]
for learn in LEARNING_RATE:
train_step = tf.train.GradientDescentOptimizer(learn).minimize(loss)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
loss_cal=[]
print(learn)
print(sess.run(w32))

for _ in range(epochs):
y_out, _ = sess.run([loss, train_step], feed_dict = {
x: inputdata[:],
t: outputdata[:]
})
loss_cal.append(y_out)
plt.plot(loss_cal)

0.01
[[-0.01278295]
[ 0.00424424]
[ 0.01260157]
[ 0.00272857]
[ 0.00025477]
[-0.00312508]
[-0.00225875]
[-0.00445066]
[ 0.00055921]
[-0.00066416]
[ 0.00816493]
[ 0.00378237]]
0.05
[[-0.01278295]
[ 0.00424424]
[ 0.01260157]
[ 0.00272857]
[ 0.00025477]
[-0.00312508]
[-0.00225875]
[-0.00445066]
[ 0.00055921]
[-0.00066416]
[ 0.00816493]
[ 0.00378237]]
0.1
[[-0.01278295]
[ 0.00424424]
[ 0.01260157]
[ 0.00272857]
[ 0.00025477]
[-0.00312508]
[-0.00225875]
[-0.00445066]
[ 0.00055921]
[-0.00066416]
[ 0.00816493]
[ 0.00378237]]
0.25
[[-0.01278295]
[ 0.00424424]
[ 0.01260157]
[ 0.00272857]
[ 0.00025477]
[-0.00312508]
[-0.00225875]
[-0.00445066]
[ 0.00055921]
[-0.00066416]
[ 0.00816493]
[ 0.00378237]]

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.78%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る