2017-05-22 16 views
1

私はKerasでモデルを訓練した後、予測のための時間ですので、モデルをチェックするためにいくつかのデータを使用しています。しかし、訓練されたモデルはトレーニングの前に標準化されています(非常に異なる値の範囲)。Kerasのnumpy配列の標準化

だから、いくつかのデータを予測するために、私もそれを標準化する必要があります

packet = numpy.array([[3232235781, 3232235779, 6, 128, 2, 1, 0, 524288, 56783, 502, 0, 0x00000010, 0, 0, 61, 0, 0, 0]]) 
scaler = StandardScaler().fit(packet) 
rescaled_packet = scaler.transform(packet) 
print(rescaled_packet) 

を出力は常に0です:[[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]

は、いずれかがnumpyの配列を標準化する方法を知っていますか?

DataConversionWarning: Data with input dtype int64 was converted to float64 by StandardScaler. warnings.warn(msg, _DataConversionWarning)という警告メッセージが表示されますが、これは問題ではないと思います。

答えて

1

これは実際には、データセットに1つの例しかないという事実から来ています。 fitを1つの例のテーブルに呼び出すと、各列の平均が計算されますが、各列に1つの番号しかない場合は、このmeanは最初の(そして唯一の)行に等しくなります。だから、0のベクトルを取得しているのです。

+0

しかし、例を拡大することができない場合は、一度に1つの例だけをテストするデータのオンラインキャプチャであるため、これがどのように解決されるのでしょうか? –

+0

あなたはデータの一部を得ることができます - あらかじめ計算しておくことを意味し、標準的なスケーラーを「適合」します。 –

+0

は、私が訓練データを装備したのと同じ変圧器を使って解決しました:) ありがとう! –

0
import numpy as np 

a = np.array([10,1,-4,35,26]) 
a_stand = (a - a.mean()*np.ones(len(a)))/(a.std()) 

これは何ですか?

+0

上記の例の出力は、次のようなものでなければなりません: '[[0.53640178 0. 0. ...、-0.88003806 -0.05902683 -0.13751838]' あなたの例では、出力は '[[2.82842711 2.8284271 -0.35358990 -0.35358906 - 0.35358918 -0.35358918 -0.35358918 -0.35307304 -0.35353328 -0.35358869 -0.35358918 -0.35358918 -0.35358918 -0.35358918 -0.35358918 -0.35358918]] ' –