Skip to content

Latitude weighted RMSE not picking up the correct dimension #21

Open

Description

@hirasaleem0703

Since the model is receiving input of [batch, seq, vars, lat (96), lon(144)]
it should be lat_size = y.shape[-2]
This is the case if channels_last is set to False.

def LLWeighted_RMSE_WheatherBench(preds: np.ndarray, y: np.ndarray):
"""
Weigthed RMSE taken from Wheather Bench.
Weighting to account for decreasing grid sizes towards the pole.

rmse = mean over forecasts and time of np.sqrt( mean over lon lat L(lat_j)*)MSE(preds, y)
weights = cos(latitude)/cos(latitude).mean()
"""
lat_size = y.shape[-1]
lats = np.linspace(-90, 90, lat_size)


weights = (np.cos(lats) / np.cos(lats)).mean()

rmse = np.sqrt(np.mean(weights * ((preds - y) ** 2), axis=(-1, -2))).mean()

return rmse

Activity

  1. liellnima commented on Sep 3, 2024

    @liellnima
    Collaborator

    Hi :)

    Please refer to issue #12 for this. Setting the channels_last to False does result in wrong numbers, and should not be used to fix this issue.

    There are several things involved here as you can see over there - I will let you know here as well when the issue is fixed!

  2. hirasaleem0703 commented on Sep 3, 2024

    @hirasaleem0703
    Author

    I tried fixing it by changing the callbacks function: split_vector_by_variable
    changed this to
    splitted_vector[var_name] = vector[..., var_channel_limits["start"] : var_channel_limits["end"]]
    to this
    splitted_vector[var_name] = vector[:,:, var_channel_limits["start"] : var_channel_limits["end"], :,:]

    Then it results in the correct shape

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions