Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add set-up of Mul_DMCons_DM for adjoint calculation #56

Merged
merged 3 commits into from
Jun 25, 2019
Merged

Conversation

cgravill
Copy link
Contributor

Fixes an initialisation issue with constant matrix * matrix

Added a simple gradient descent test, perhaps need to separate out these smoke tests or start controlling the randomness and check results.

@cgravill
Copy link
Contributor Author

Note there may be other reachable cases that have an equivalent issue. We might need a different strategy to ensure all the right cases are handled:

| DMR(_, o, _, uniq) ->
let fanout = incrementFanout fanouts uniq
if fanout = 1u then
adjoints.SetDM(uniq,DM.ZeroMN d.Rows d.Cols)
match o with
| Add_DM_DM(a, b) -> resetRec (bxd a :: bxd b :: t)
| Add_DM_DMCons(a) -> resetRec (bxd a :: t)
| Sub_DM_DM(a, b) -> resetRec (bxd a :: bxd b :: t)
| Sub_DM_DMCons(a) -> resetRec (bxd a :: t)
| Sub_DMCons_DM(a) -> resetRec (bxd a :: t)
| Mul_DM_DM(a, b) -> resetRec (bxd a :: bxd b :: t)
| Mul_DM_DMCons(a, _) -> resetRec (bxd a :: t)
| Mul_Had_DM_DM(a, b) -> resetRec (bxd a :: bxd b :: t)
| Mul_Had_DM_DMCons(a, _) -> resetRec (bxd a :: t)
| Mul_DM_D(a, b) -> resetRec (bxd a :: bxd b :: t)
| Mul_DM_DCons(a, _) -> resetRec (bxd a :: t)
| Mul_DMCons_D(_, b) -> resetRec (bxd b :: t)
| Mul_Out_DV_DV(a, b) -> resetRec (bxd a :: bxd b :: t)
| Mul_Out_DV_DVCons(a, _) -> resetRec (bxd a :: t)
| Mul_Out_DVCons_DV(_, b) -> resetRec (bxd b :: t)
| Div_Had_DM_DM(a, b) -> resetRec (bxd a :: bxd b :: t)
| Div_Had_DM_DMCons(a, _) -> resetRec (bxd a :: t)
| Div_Had_DMCons_DM(_, b) -> resetRec (bxd b :: t)
| Pow_DM_DM(a, b) -> resetRec (bxd a :: bxd b :: t)
| Pow_DM_DMCons(a, _) -> resetRec (bxd a :: t)
| Pow_DMCons_DM(_, b) -> resetRec (bxd b :: t)
| Atan2_DM_DM(a, b) -> resetRec (bxd a :: bxd b :: t)
| Atan2_DM_DMCons(a, _) -> resetRec (bxd a :: t)
| Atan2_DMCons_DM(_, b) -> resetRec (bxd b :: t)
| Div_DM_D(a, b) -> resetRec (bxd a :: bxd b :: t)
| Div_DM_DCons(a, _) -> resetRec (bxd a :: t)
| Div_DMCons_D(_, b) -> resetRec (bxd b :: t)
| Div_D_DM(a, b) -> resetRec (bxd a :: bxd b :: t)
| Div_D_DMCons(a, _) -> resetRec (bxd a :: t)
| Div_DCons_DM(_, b) -> resetRec (bxd b :: t)
| Add_DM_D(a, b) -> resetRec (bxd a :: bxd b :: t)
| Add_DM_DCons(a) -> resetRec (bxd a :: t)
| Add_DMCons_D(b) -> resetRec (bxd b :: t)
| Add_DMCols_DV(a, b) -> resetRec (bxd a :: bxd b :: t)
| Add_DMCols_DVCons(a) -> resetRec (bxd a :: t)
| Add_DMColsCons_DV(b) -> resetRec (bxd b :: t)
| Sub_DM_D(a, b) -> resetRec (bxd a :: bxd b :: t)
| Sub_DM_DCons(a) -> resetRec (bxd a :: t)
| Sub_DMCons_D(b) -> resetRec (bxd b :: t)
| Sub_D_DM(a, b) -> resetRec (bxd a :: bxd b :: t)
| Sub_D_DMCons(a) -> resetRec (bxd a :: t)
| Sub_DCons_DM(b) -> resetRec (bxd b :: t)
| Pow_DM_D(a, b) -> resetRec (bxd a :: bxd b :: t)
| Pow_DM_DCons(a, _) -> resetRec (bxd a :: t)
| Pow_DMCons_D(_, b) -> resetRec (bxd b :: t)
| Pow_D_DM(a, b) -> resetRec (bxd a :: bxd b :: t)
| Pow_D_DMCons(a, _) -> resetRec (bxd a :: t)
| Pow_DCons_DM(_, b) -> resetRec (bxd b :: t)
| Atan2_DM_D(a, b) -> resetRec (bxd a :: bxd b :: t)
| Atan2_DM_DCons(a, _) -> resetRec (bxd a :: t)
| Atan2_DMCons_D(_, b) -> resetRec (bxd b :: t)
| Atan2_D_DM(a, b) -> resetRec (bxd a :: bxd b :: t)
| Atan2_D_DMCons(a, _) -> resetRec (bxd a :: t)
| Atan2_DCons_DM(_, b) -> resetRec (bxd b :: t)
| Log_DM(a) -> resetRec (bxd a :: t)
| Log10_DM(a) -> resetRec (bxd a :: t)
| Exp_DM(a) -> resetRec (bxd a :: t)
| Sin_DM(a) -> resetRec (bxd a :: t)
| Cos_DM(a) -> resetRec (bxd a :: t)
| Tan_DM(a) -> resetRec (bxd a :: t)
| Neg_DM(a) -> resetRec (bxd a :: t)
| Sqrt_DM(a) -> resetRec (bxd a :: t)
| Sinh_DM(a) -> resetRec (bxd a :: t)
| Cosh_DM(a) -> resetRec (bxd a :: t)
| Tanh_DM(a) -> resetRec (bxd a :: t)
| Asin_DM(a) -> resetRec (bxd a :: t)
| Acos_DM(a) -> resetRec (bxd a :: t)
| Atan_DM(a) -> resetRec (bxd a :: t)
| Abs_DM(a) -> resetRec (bxd a :: t)
| Sign_DM(a) -> resetRec (bxd a :: t)
| Floor_DM(a) -> resetRec (bxd a :: t)
| Ceil_DM(a) -> resetRec (bxd a :: t)
| Round_DM(a) -> resetRec (bxd a :: t)
| Transpose_DM(a) -> resetRec (bxd a :: t)
| Make_DM_ofDs(a) -> resetRec (List.append (a |> Array2D.toArray |> Array.map bxd |> List.ofArray) t)
| Make_DMRows_ofDV(a) -> resetRec (bxd a :: t)
| Make_DMCols_ofDV(a) -> resetRec (bxd a :: t)
| Make_DMRows_ofDVs(a) -> resetRec (List.append (a |> Array.map bxd |> List.ofArray) t)
| AddItem_DM_D(a, _, _, b) -> resetRec (bxd a :: bxd b :: t)
| AddItem_DM_DCons(a) -> resetRec (bxd a :: t)
| AddItem_DMCons_D(_, _, b) -> resetRec (bxd b :: t)
| AddSubMatrix_DM_DM(a, _, _, b) -> resetRec (bxd a :: bxd b :: t)
| AddSubMatrix_DM_DMCons(a) -> resetRec (bxd a :: t)
| AddSubMatrix_DMCons_DM(_, _, b) -> resetRec (bxd b :: t)
| Slice_DM(a, _, _) -> resetRec (bxd a :: t)
| RowMatrix_DV(a) -> resetRec (bxd a :: t)
| AddDiagonal_DM_DV(a, b) -> resetRec (bxd a :: bxd b :: t)
| AddDiagonal_DM_DVCons(a) -> resetRec (bxd a :: t)
| AddDiagonal_DMCons_DV(b) -> resetRec (bxd b :: t)
| ReshapeCopy_DV_DM(a) -> resetRec (bxd a :: t)
| Inverse_DM(a) -> resetRec (bxd a :: t)
| ReLU_DM(a) -> resetRec (bxd a :: t)
| Sigmoid_DM(a) -> resetRec (bxd a :: t)
| _ -> resetRec t

@cgravill cgravill requested a review from dsyme June 25, 2019 12:39
@cgravill
Copy link
Contributor Author

Spoke with @dsyme directly I'm going to merge this specific fix.

I'll take a look at a more general change to separate out the scalar, vector, and matrix operations separately.

@cgravill cgravill merged commit c18b6e6 into master Jun 25, 2019
Copy link
Collaborator

@dsyme dsyme left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

approved

@cgravill cgravill deleted the Mul_DMCons_DM branch November 3, 2020 17:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants