【发布时间】:2021-11-07 22:16:40
【问题描述】:
我想在 Tensorflow 中用 lambda 层替换 nan 值。我编写了下面的代码,它用 0 替换了 nan 数据,但是当我将它传递到下一层时,它们都是 nan !!!谁能说出为什么会发生这种情况以及如何解决?
# split into train test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=1)
t = MinMaxScaler()
t.fit(X_train)
X_train = t.transform(X_train)
X_test = t.transform(X_test)
# define model
visible = Input(shape=(n_inputs,))
before_lambda_model = Model(visible, visible, name="before_lambda_model")
e1 = Lambda(lambda x: tf.where(tf.math.logical_not(tf.math.is_nan(x)), x, 0))(visible)
after_lambda_model = Model(visible, e1, name="after_lambda_model")
output = Dense(n_inputs)(e1)
after_lambda_model2 = Model(visible, output, name="after_lambda_model")
model = Model(inputs=visible, outputs=output)
model.summary()
model.compile(optimizer='adam', loss='mse')
history = model.fit(X_train, X_train, epochs=10, batch_size=16, verbose=2, validation_data=(X_test,X_test))
p = model.predict(X)
m1 = before_lambda_model.predict(X)
m2 = after_lambda_model.predict(X)
m3 = after_lambda_model2.predict(X)
m1,m2.m3
结果:
m1 = (array([[ 0.21534143, 2.939421 , 0.6070648 , ..., -1.2343541 ,
1.7189204 , 0.2322954 ],
[ nan, 3.4668574 , -2.365954 , ..., 0.8618614 ,
2.0272305 , 1.7704849 ],
[-0.5045265 , -6.8411074 , -1.6613791 , ..., -0.89379954,
2.2879124 , -1.1259099 ],
...,
[ 2.5370893 , 3.0216992 , 0.02399945, ..., -0.23845583,
-0.09022954, -0.8587186 ],
[-0.7871305 , -3.2095814 , -0.9872522 , ..., 0.455077 ,
-0.2627696 , -2.1793683 ],
[-0.6270084 , 4.0463853 , -1.293341 , ..., -0.16465937,
1.908124 , -0.35484752]], dtype=float32),
m2 = array([[ 0.21534143, 2.939421 , 0.6070648 , ..., -1.2343541 ,
1.7189204 , 0.2322954 ],
[ 0. , 3.4668574 , -2.365954 , ..., 0.8618614 ,
2.0272305 , 1.7704849 ],
[-0.5045265 , -6.8411074 , -1.6613791 , ..., -0.89379954,
2.2879124 , -1.1259099 ],
...,
[ 2.5370893 , 3.0216992 , 0.02399945, ..., -0.23845583,
-0.09022954, -0.8587186 ],
[-0.7871305 , -3.2095814 , -0.9872522 , ..., 0.455077 ,
-0.2627696 , -2.1793683 ],
[-0.6270084 , 4.0463853 , -1.293341 , ..., -0.16465937,
1.908124 , -0.35484752]], dtype=float32),
m3 = array([[nan, nan, nan, ..., nan, nan, nan],
[nan, nan, nan, ..., nan, nan, nan],
[nan, nan, nan, ..., nan, nan, nan],
...,
[nan, nan, nan, ..., nan, nan, nan],
[nan, nan, nan, ..., nan, nan, nan],
[nan, nan, nan, ..., nan, nan, nan]], dtype=float32))
【问题讨论】:
标签: python tensorflow lambda nan