2

私は畳み込みニューラルネットワークを構築しようとしましたが、私は本当に奇妙な問題を偶然見つけました。ある Tensorflow:重みは変化せず、コストは1.0に設定されました

  • 変数「コ​​スト」変更しない重みとフィルタの

    1. 値:今ここに私の問題がある

      import tensorflow as tf 
      import numpy as np 
      import matplotlib.image as mpimg 
      import glob 
      
      x = [] 
      y = 1 
      
      for filename in glob.glob('trainig_data/*.jpg'): 
          im = mpimg.imread(filename) 
          x.append(im) 
          if len(x) == 10: 
           break 
      epochs = 5 
      
      weights = [tf.Variable(tf.random_normal([5,5,3,32],0.1)), 
            tf.Variable(tf.random_normal([5,5,32,64],0.1)), 
            tf.Variable(tf.random_normal([5,5,64,128],0.1)), 
            tf.Variable(tf.random_normal([75*75*128,1064],0.1)), 
            tf.Variable(tf.random_normal([1064,1],0.1))] 
      
      def CNN(x, weights): 
          output = tf.nn.conv2d([x], weights[0], [1,1,1,1], 'SAME') 
          output = tf.nn.relu(output) 
          output = tf.nn.conv2d(output, weights[1], [1,2,2,1], 'SAME') 
          output = tf.nn.relu(output) 
          output = tf.nn.conv2d(output, weights[2], [1,2,2,1], 'SAME') 
          output = tf.nn.relu(output) 
          output = tf.reshape(output, [-1,75*75*128]) 
          output = tf.matmul(output, weights[3]) 
          output = tf.nn.relu(output) 
          output = tf.matmul(output, weights[4]) 
          output = tf.reduce_sum(output) 
          return output 
      
      
      sess = tf.Session() 
      prediction = CNN(tf.cast(x[0],tf.float32), weights) 
      cost = tf.reduce_mean(tf.square(prediction-y)) 
      train = tf.train.GradientDescentOptimizer(0.01).minimize(cost) 
      init = tf.global_variables_initializer() 
      
      sess.run(init) 
      for e in range(epochs): 
          print('epoch:',e+1) 
          for x_i in x: 
           prediction = CNN(tf.cast(x_i,tf.float32), weights) 
           sess.run([cost, train]) 
           print(sess.run(cost)) 
      print('optimization finished!') 
      print(sess.run(prediction)) 
      

      最初の最初は、ここに私のコードです常に1.0

    2. 予測は常に0を返します0

    いくつかのデバッグを行った後、オプティマイザからウェイトを入れる前に、コストと予測が1.0と0でないため、問題がオプティマイザから発生していることがわかりました。

    私はそれが十分な情報であり、あなたが私の問題を助けてくれることを望みます。

  • 答えて

    0

    ウェイトを初期化する方法を変更してください。ウェイトを初期化するには、tf.truncated_normalを使用してください。 tf.truncated_normalの違いを示すanswerを参照してください。

    tf.truncted_normal:切り捨て正規分布からランダム値を出力します。生成された値は、指定された平均値と標準偏差を持つ正規分布に従いますが、平均値から2標準偏差を超える値が削除され、再選択されます。

    tf.random_normal:正規分布からランダムな値を出力します。

    +0

    何も変更されていません –

    関連する問題