TensorFlowフレームワークの下でDBNネットワークを実現

6574 ワード

前置き前のブログ『Windowsの下にTensorflowをインストール』に基づき、深さ学習ネットワークであるDBNネットワークを実現し、古典的な手書きフォント認識を例に挙げます.
一、手書きフォントデータセットをダウンロードし、公式サイトは以下の通りである.http://yann.lecun.com/exdb/mnist/ダウンロード:train-images-idx3-ubyte.gz: training set images (9912422 bytes)
train-labels-idx1-ubyte.gz: training set labels (28881 bytes)
t10k-images-idx3-ubyte.gz: test set images (1648877 bytes)
t10k-labels-idx1-ubyte.gz: test set labels (4542 bytes)
二、github上のDBNを参照してソースコードを実現する:https://github.com/myme5261314/dbn_tf
原作者が実現する過程:https://gist.github.com/myme5261314/005ceac0483fc5a581cc
注意:ブロガーが選択したpythonエディタはpycharmエディタで、windowsの下にtensorflowをインストールした後、pycharmでパスを構成する必要があります.具体的な参考:http://blog.csdn.net/wx7788250/article/details/60877166
三、githubでダウンロードしたコードをpycharmにインポートすると、いくつかのエラーが発生します.以下、一つ一つ修正します.問題1:公式PIL(python image library)は現在python 2.7以下のバージョンしかサポートされていません.だから、コードをインポートすると、ImportError: No module named 'Image'、つまりimportがimageというライブラリにないことを提示します.解決方法:非公式ライブラリをダウンロードするにはhttp://www.lfd.uci.edu/~gohlke/pythonlibs/このウェブサイトには64ビットシステムをサポートするPILファイルが提供されている.ウェブサイトにはPillowと呼ばれ、ダウンロードされている.whlの最後のファイル、これは実はpythonが使用する圧縮ファイルで、接尾辞名をzipに変更して、開くことができます.これはpipで取り付ける必要があり、cmdの下で、この.whlダウンロードフォルダ、入力
pip install Pillow‑4.1.1‑cp35‑cp35m‑win_amd64.whl

を選択して設定できます.ここにPillow is a replacement for PIL,the Python Image Library,which provides image processing functionality and supports many file formatsがあります.Use from PIL import Image instead of import Image . つまり、「import Image」の代わりに「from PIL import Image」、つまりインポートしたプログラムコードのimport Imageをfrom PIL import Imageに変更すればよいということです.
from PIL import Image 

問題2:バージョンの問題でpython 3.Xではprintの出力に「()」を付けるので、修正後の様子は:
  print (sess.run(
            err_sum, feed_dict={X: trX, rbm_w: n_w, rbm_vb: n_vb, rbm_hb: n_hb}))

問題3:上記の問題を修正した後、エラーがないように見えますが、コードrbm_を実行します.MNIST_test.pyは依然として問題があることを発見し、問題の説明は以下の通りである.
C:\Users\Administrator\AppData\Local\Programs\Python\Python35\python.exe D:/hlDL/tensorflow-DBN/dbn_tf-master/rbm_MNIST_test.py
Traceback (most recent call last):
  File "D:/hlDL/tensorflow-DBN/dbn_tf-master/rbm_MNIST_test.py", line 16, in <module>
    mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
Extracting MNIST_data/train-images-idx3-ubyte.gz
  File "D:\hlDL\tensorflow-DBN\dbn_tf-master\input_data.py", line 150, in read_data_sets
    train_images = extract_images(local_file)
  File "D:\hlDL\tensorflow-DBN\dbn_tf-master\input_data.py", line 39, in extract_images
    buf = bytestream.read(rows * cols * num_images)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35\lib\gzip.py", line 274, in read
    return self._buffer.read(size)
TypeError: only integer scalar arrays can be converted to a scalar index

変更方法:input_data.pyでコードを見つけます
def _read32(bytestream):
  dt = numpy.dtype(numpy.uint32).newbyteorder('>')
  return numpy.frombuffer(bytestream.read(4), dtype=dt)

次のように変更します.
def _read32(bytestream):
  dt = numpy.dtype(numpy.uint32).newbyteorder('>')
  return numpy.frombuffer(bytestream.read(4), dtype=dt)[0]

末尾に[0]を付けて再運転し、問題が解決します.この問題は新しいバージョンのNumpyが存在するようで、最近の更新では、単一の要素配列をスカラーとしてインデックス化しています.
四、運行結果在TensorFlow框架下实现DBN网络_第1张图片注:具体的なコードに基づいて、出力結果は10000回ごとに精度を出力し、合計60000回反復し、同時に10000回ごとに識別結果のimageを出力し、rbm_と命名する.x.png.ここで最初の識別結果と最後の識別結果を貼り付けた図は以下の通りである:在TensorFlow框架下实现DBN网络_第2张图片 rbm_0 在TensorFlow框架下实现DBN网络_第3张图片 rbm_5