1

関数 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 の損失

4

0 に答える 0