関数 f(X)=y を近似するニューラル ネットワークに取り組んでいます。X はベクトル [x0, .., xn] で、y は [-inf, +inf] です。この近似関数は、約 1e-8 の精度 (誤差の合計) を持つ必要があります。実際、オーバーフィットするにはニューラル ネットワークが必要です。
X は、間隔 -500 と 500 のランダムなポイントで構成されています。これらのポイントを入力レイヤーに入れる前に、[0, 1] の間で正規化しました。
次のようにケラスを使用します。
dimension = 10 #example
self.model = Sequential()
self.model.add(Dense(128, input_shape=(dimension,), init='uniform', activation='relu'))
self.model.add(Dropout(.2))
self.model.add(Activation("linear"))
self.model.add(Dense(64, init='uniform', activation='relu'))
self.model.add(Activation("linear"))
self.model.add(Dense(64, init='uniform', activation='relu'))
self.model.add(Dense(1))
X_scaler = preprocessing.MinMaxScaler(feature_range=(0, 1))
y_scaler = preprocessing.MinMaxScaler(feature_range=(0, 1))
X_scaled = (X_scaler.fit_transform(train_dataset))
y_scaled = (y_scaler.fit_transform(train_labels))
self.model.compile(loss='mse', optimizer='adam')
self.model.fit(X_scaled, y_scaled, epochs=10000, batch_size=10, verbose=1)
Relu活性化関数で[n]→[2]→[1]、次に[n]→[128]→[64]→[1]という別のNNを試してみました。SGB Optimizer を試し、学習率を 1e-9 から 0.1 にゆっくりと上げました。データを正規化せずに試してみましたが、この場合、損失が非常に大きくなります。
私の最高の損失 (MSE) は、現在のセットアップで 0.037 ですが、目標 (1e-8) には程遠いです。
まず、私が何か間違ったことをしたかどうかを知りたいです。元気ですか?そうでない場合、どうすれば目標を達成できますか?
どうもありがとうございます
#2 を試す
この新しい構成を試しました:
model = Sequential()
model.add(Dense(128, input_shape=(10,), init='uniform', activation='relu'))
model.add(Dropout(.2))
model.add(Dense(64, init='uniform', activation='relu'))
model.add(Dense(64, init='uniform', activation='relu'))
model.add(Dense(1, init='uniform', activation='sigmoid'))
50 要素のサンプルでは、batch_size は 10 で、100000 エポックの間。1e-4 前後の損失が発生します。
#3 を試す
model.add(Dense(128, input_shape=(10,), activation='tanh'))
model.add(Dense(64, activation='tanh'))
model.add(Dense(1, activation='sigmoid'))
batch_size=1000 エポック=1e5
結果: 約 1.e-7 の損失