私の今日の質問はfann2
、Python 2 のパッケージを使用中matplotlib
またはpyqtgraph
同時使用中の奇妙な動作についてです。
FANN ネットワークの MSE をリアルタイムでプロットする必要があるとしましょう。次にmatplotlib
、対話機能といくつかのwhile True
ループを使用するかThread
、プロットを更新します。しかし、簡単にするために、次の例を見てみましょう。
次のスクリプトは、新しいニューラル ネットワークを作成し、ファイルに保存します。
#!/usr/bin/python2
from fann2 import libfann
import matplotlib.pyplot as plt
PLOT = False
if PLOT:
plt.show()
axes = plt.subplot(111)
connection_rate = 1
layers = (10, 5)
activation_f = libfann.SIGMOID_SYMMETRIC_STEPWISE
ann = libfann.neural_net()
ann.create_sparse_array(connection_rate, layers)
ann.randomize_weights(-0.1, 0.1)
ann.save('my_network.ann')
PLOT
現在プロットを無効にしているフラグに注意してください。
では、出力ファイルを見てみましょう。最後の行の fe を見てみましょう:
connections (connected_to_neuron, weight)=(0, -9.04591381549835205078e-02) ...
(...
はより省略された文字を意味します)
PLOT
値を...に変更するまでは問題ありTrue
ません。その後、対応する行は次のようになります。
connections (connected_to_neuron, weight)=(0, -7,55163878202438354492e-02) ...
これにより、保存されたネットワークをロードする際にエラーが発生します。例:
from fann2 import libfann
ann = libfann.neural_net()
ann.create_from_file('my_network.ann')
次のエラーが発生します。FANN Error 4: Error reading "connection_rate" from configuration file "my_network.ann".
この奇妙な問題を修正する方法を知っている人はいますか? たぶん、matplotlib のどこかで浮動小数点数の形式を変更する必要がありますか? 彼らのドキュメントを検索しましたが、その方法が見つかりませんでした。
原因は他にあると思います。これは非常に面白いですが、PyQtGraph は同じ結果を返します。ボーナススクリプトは次のとおりです。
#!/usr/bin/python2
from fann2 import libfann
import pyqtgraph as pg
PLOT = False
if PLOT:
pg.plot([1, 2], [3, 4], pen=None, symbol='o')
connection_rate = 1
layers = (10, 5)
activation_f = libfann.SIGMOID_SYMMETRIC_STEPWISE
ann = libfann.neural_net()
ann.create_sparse_array(connection_rate, layers)
ann.randomize_weights(-0.1, 0.1)
ann.save('my_network.ann')