変数netとnet1を使用して同じ係数と予測を得る理由についての質問に答えるには、両方が同じオブジェクトへの参照であるためです。 ことを確認するために、あなたはこれを実行することができます。
print(net is net1)
あなたはTrue
を取得します。その理由は、MLPRegressor
オブジェクトの参照を既に作成しているためです。したがって、fit
の値がXとyのモデルの場合、net
というモデルは、指定された値に適合し、同じオブジェクトをnet1
に割り当てようとします。
次に、学習率を上げるため、または少なくともニューラルネットワークが提供されたデータに適合するように、学習率(0.01など)を下げる必要があると思います。
最後に、既にチェックされているように、データがランダムなデータであるため、テストデータ以外の値ではモデルのパフォーマンスが向上しないことがあります。
編集:エポックの各ラウンドの後に学んだの重み(係数)を印刷する要求に基づいて
、私は余分な詳細を追加しています。 MLPRegressorと同じように、各反復/バッチなどの後で学習されたウェイトの詳細を印刷することはできません。そのためにはsknn.mlpモジュールを使用する必要があります。彼らはあなたの学習の時間を印刷/評価するために使用できる様々なcallbacksを持っています。このコードを実行すると
def print_coeff_callback(**variables):
print('End of epoch: {}'.format(variables['i']))
print('Layer 0: Weights:')
print(variables['best_params'][0][0])
print('Layer 0: Biases:')
print(variables['best_params'][0][1])
print('Layer 1: Weights:')
print(variables['best_params'][1][0])
print('Layer 1: Biases:')
print(variables['best_params'][1][1])
print()
import numpy as np
temp_data_x = np.random.randn(200,3)
temp_data_y = temp_data_x[:,0] + temp_data_x[:,1] + temp_data_x[:,2]\
+ np.random.randn(200,1).reshape(200,)
from sknn.mlp import Regressor, Layer
net = Regressor(layers = [Layer('Tanh', units = 3), Layer('Linear', units = 1)],
learning_rate = 0.01, n_iter = 10,
verbose = True, random_state = 3,
callback = {'on_epoch_finish': print_coeff_callback})
net.fit(temp_data_x[0:150,],temp_data_y[0:150])
、各エポックの終わりに、あなたはこのような追加の詳細を取得します:
End of epoch: 1
Layer 0: Weights:
[[-0.50751932 -0.72378025 -0.37128063]
[-0.53206593 -0.33147215 0.83072845]
[-0.66474313 -0.76372327 -0.85991181]]
Layer 0: Biases:
[-0.03277463 -0.10826231 0.01669442]
Layer 1: Weights:
[[-0.88015991]
[-1.13531142]
[ 0.06633887]]
Layer 1: Biases:
[ 0.16668694]
End of epoch: 2
Layer 0: Weights:
[[-0.49187796 -0.70438651 -0.36641678]
[-0.66897643 -0.51718653 0.83213911]
[-0.68042139 -0.72434914 -0.85017705]]
Layer 0: Biases:
[ 0.09687692 0.04577672 0.00219902]
Layer 1: Weights:
[[-1.11614207]
[-1.31741563]
[-0.02267721]]
Layer 1: Biases:
[ 0.02075817]
として
は、以下のコードあなたが始めるために考えてみましょう学習した重み/偏りの詳細が存在し、時々刻々と変化しています。
あなたは初期モデル 'net'が 'net1'によって上書きされることを意味します。それでは、どうすれば 'ネット'モデルを変更しないでおくことができますか?私が比較できるように? – user67275
実際には、現在のデータセットに別の観測値を追加し、モデル 'net1'と 'net2'を比較する必要があります。 – user67275
同じ擬似コードをRまたはMATLABに実装すると、モデル 'net1'に適合していても 'net'モデルは同じままになります。 Pythonはこれのように動作しますか? – user67275