【问题标题】:how to replace nan value with lambda layer?如何用 lambda 层替换 nan 值?
【发布时间】: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


    【解决方案1】:

    如果有人遇到同样的问题,我会回答我的问题。 这种泄漏是因为我在 model.fit 中为 x 和 y 传递了 x_train,这对于自动编码器模型是正确的,但在这种情况下,我删除了 x 位置的 x_train 的 nan 数据,但不删除 y 位置的 x_tarin 的 nan 数据。要解决此问题,您应该在 y 位置传递没有 nan 的数据。

    model.fit(X_train, X_train, epochs=10, batch_size=16, verbose=2, validation_data=(X_test,X_test))

    【讨论】:

      猜你喜欢
      • 2018-09-24
      • 2019-09-29
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多