我正试图建立一个自动编码器与加权均方误差作为损失函数。但损失是nan
。我尝试删除sample_weight
选项,效果很好。还尝试将所有权重更改为1,其中损失再次显示为nan
示范建筑规范:
a_train = df1.drop(dropcols,axis=1).values
n_cols = a_train.shape[1]
a_train_wt = df1.wt.to_numpy()
reg_parm = 0
def build_model():
model = keras.Sequential([
keras.layers.Dense(1000, activation='relu', input_shape=[n_cols], kernel_regularizer=keras.regularizers.l2(l=reg_parm),name = 'encoder'),
keras.layers.Dropout(0.25),
keras.layers.Dense(35, activation='relu', kernel_regularizer=keras.regularizers.l2(l=reg_parm),name = 'middlelayer'),
keras.layers.Dense(1000, activation='relu', kernel_regularizer=keras.regularizers.l2(l=reg_parm), name = 'decoder'),
keras.layers.Dense(n_cols)
])
optimizer = tf.keras.optimizers.SGD(learning_rate=0.01, momentum=0.9)
model.compile(loss='mse',
optimizer=optimizer,
metrics=[ 'mse'])
return model
model = build_model()
EPOCHS = 3
固定为sample_weight
的代码:
history = model.fit(a_train, a_train,epochs=EPOCHS, verbose=0,shuffle = True,
sample_weight= np.ones_like(a_train_wt))
history.history
输出为
WARNING:tensorflow:sample_weight modes were coerced from
...
to
['...']
>>> history.history
{'loss': [nan, nan, nan], 'mse': [nan, nan, nan]}
带有sample_weight
选项和实际权重的代码:
history = model.fit(a_train, a_train,epochs=EPOCHS, verbose=0,shuffle = True,
sample_weight= a_train_wt)
history.history
输出为
WARNING:tensorflow:sample_weight modes were coerced from
...
to
['...']
>>> history.history
{'loss': [nan, nan, nan], 'mse': [nan, nan, nan]}
不带sample_weight
选项的代码:
history = model.fit(a_train, a_train,epochs=EPOCHS, verbose=0,shuffle = True)
history.history
输出为
>>> history.history
{'loss': [0.025739491703135765, 0.014569135967237794, 0.01305462488841959], 'mse': [0.025739575, 0.014569142, 0.0130546]}
tensorflow版本:
>>> print(tf.__version__)
2.1.0
>>> import sys
>>> print(sys.version)
3.7.7 (default, Apr 15 2020, 05:09:04) [MSC v.1916 64 bit (AMD64)]
目前没有回答
相关问题 更多 >
编程相关推荐