def shape_test(y_true, y_pred):
return K.shape(y_pred)[0]
(Theanoバックエンドを使用して)私自身のカスタムメトリックを定義することにより、y_pred
の大きさを監視する
を与えるそのカスタムメトリック機能でy_pred
の次元ミニバッチサイズに等しい。しかし、私は奇妙な出力を取得します。以下の小さな再現可能な例を参照してください。
#imports and definitions
import numpy
numpy.random.seed(1234)
import keras.backend as K
from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers import SGD
neuron_num=20
dim_input=2
#batch size will be important below!
batch_size=2048
TT=int(1e4)
#sample data
X=numpy.random.randn(TT,dim_input)
eps=numpy.random.randn(TT)
Y=0.3*X[:,0]+0.5*X[:,1]+eps
x={"is":X[:(TT/2),:],"os":X[(TT/2+1):,:]}
y={"is":Y[:(TT/2)],"os":Y[(TT/2+1):]}
def shape_test(y_true, y_pred):
return K.shape(y_pred)[0]
上に示したように、これは、今すぐ、簡単なNN
にsgd=SGD(lr=1e-2,nesterov=True)
model=Sequential()
model.add(Dense(neuron_num,
input_dim=x["is"].shape[1],
init="glorot_normal",
activation="tanh"))
model.add(Dense(neuron_num,init="glorot_normal",activation="tanh"))
model.add(Dense(1,init="glorot_normal",activation="linear"))
model.compile(loss="mean_squared_error",
optimizer=sgd,
metrics=["mean_squared_error",shape_test])
model.fit(x["is"],
y["is"],
validation_data=(x["os"],y["os"]),
nb_epoch=1,
batch_size=batch_size,
verbose=False).history
を定義する。これは、私がを見て期待した
#{'loss': [1.834826689338684],
# 'mean_squared_error': [1.834826689338684],
# 'shape_test': [1841],
# 'val_loss': [1.4931119817522769],
# 'val_mean_squared_error': [1.4931119817522769],
# 'val_shape_test': [1841.1716343268654]}
を与えるカスタムメトリックです'shape_test': [1841]
の代わりに0、バッチサイズは2048です。
これは非常に奇妙です。これはおそらくバグでしょうか? 私はPython 2.7.6
,Keras==1.0.8
,Theano==0.8.2
とCPUを使用しています。
感謝を!ミニバッチが交換せずに選択されているのを忘れてしまった。はい、904の最後の値はまだ面白いようですが、おそらく重要ではありません。 – cryo111