現時点では、this websiteに基づいたPythonの機械学習で遊んでいます(パート2は画像認識に関するものです)。機械学習の入出力サイズ
ニューラルネットワークは、単純に行列を乗算し、与えられた出力と認識された出力との間のデルタを計算し、重みを再計算することによって作成されます。マトリックス内にある。さて、私は入力として600x800
ピクセル画像を持っているとしましょう。これをレイヤーマトリックスに乗算すると、出力として4x2
マトリックスを得ることができません(各ポイントについてx,y
)。
私の2番目の問題は、この問題に対してどのくらいの隠れたレイヤーが必要なのでしょうか?より多くのレイヤーが常に優れていますが、計算に時間がかかりますか?どれだけの隠れたレイヤーが必要か、いくつかの値をテストして、それを最大限に使うべきかを推測できますか?
私の現在のニューラルネットワークコード:
from os.path import isfile
import numpy as np
class NeuralNetwork:
def __init__(self):
np.random.seed(1)
self.syn0 = 2 * np.random.random((480000,8)) - 1
@staticmethod
def relu(x, deriv=False):
if(deriv):
res = np.maximum(x, 0)
return np.minimum(res, 1)
return np.maximum(x, 0)
def train(self, imgIn, out):
l1 = NeuralNetwork.relu(np.dot(imgIn, self.syn0))
l1_error = out - l1
exp = NeuralNetwork.relu(l1,True)
l1_delta = l1_error * exp
self.syn0 += np.dot(imgIn.T,l1_delta)
return l1 #np.abs(out - l1)
def identify(self, img):
return NeuralNetwork.relu(np.dot(imgIn, self.syn0))
それは私を助けました。ありがとうございました!しかし、今私は別の問題に直面しています:最初のレイヤー(最初はランダムに生成されたもの)でイメージを掛け合わせると、結果行列の値が大きくなり、nonlin(Sigmoid)メソッドの 'exp'関数は計算される。私はそれに近づけることができるアイデアですか?または、おそらくより良いシグモイド関数ですか? – Cilenco
Relu機能を使用することができます。シグモイド関数は、勾配が消える問題があるため、現在は使用されていません。 ReLUはほとんどすべての状況に最適なソリューションです – Hulk
ありがとうございます私はこれで試してみましょう! 'error_delta'を計算するためにこの関数の派生関数を使用していますか?これは' 0'または '1'なので、少し奇妙です。 – Cilenco