| 9 | using namespace std; |
| 10 | |
| 11 | int main(int argc, char *argv[]) |
| 12 | { |
| 13 | //LSTM part |
| 14 | auto lstm = LSTM(3, 100, 2,1,true); |
| 15 | auto lstm_input = torch::Tensor(torch::linspace(1,15,15)).unsqueeze(1).repeat({1,3}).unsqueeze(0).repeat({4,1,1});//[4,15,3] |
| 16 | auto lstm_target = torch::full({4,2},16).to(torch::kFloat); |
| 17 | auto optimizer_lstm = torch::optim::Adam(lstm.parameters(),0.003); |
| 18 | for(int i=0; i<130;i++){ |
| 19 | optimizer_lstm.zero_grad(); |
| 20 | auto out = lstm.forward(lstm_input.to(torch::kFloat)); |
| 21 | auto loss = torch::mse_loss(out,lstm_target); |
| 22 | loss.backward(); |
| 23 | optimizer_lstm.step(); |
| 24 | cout<<out; |
| 25 | } |
| 26 | |
| 27 | |
| 28 | //CNN part |
| 29 | auto cnn = plainCNN(3,1); |
| 30 | auto cnn_input = torch::randint(255,{1,3,224,224}); |
| 31 | torch::optim::Adam optimizer_cnn(cnn.parameters(), 0.0003); |
| 32 | auto cnn_target = torch::zeros({1,1,26,26}); |
| 33 | for(int i=0; i<30;i++){ |
| 34 | optimizer_cnn.zero_grad(); |
| 35 | auto out = cnn.forward(cnn_input); |
| 36 | auto loss = torch::mse_loss(out,cnn_target); |
| 37 | loss.backward(); |
| 38 | optimizer_cnn.step(); |
| 39 | cout<<out[0][0][0]; |
| 40 | } |
| 41 | |
| 42 | auto mlp = MLP(10,1); |
| 43 | auto mlp_input = torch::rand({2,10}); |
| 44 | auto mlp_target = torch::ones({2,1}); |
| 45 | torch::optim::Adam optimizer_mlp(mlp.parameters(), 0.0005); |
| 46 | for(int i=0; i<400; i++){ |
| 47 | optimizer_mlp.zero_grad(); |
| 48 | auto out = mlp.forward(mlp_input); |
| 49 | auto loss = torch::mse_loss(out,mlp_target); |
| 50 | loss.backward(); |
| 51 | optimizer_mlp.step(); |
| 52 | cout<<out; |
| 53 | } |
| 54 | |
| 55 | string pt_path = "D:/AllentFiles/code/tmp/resnet34.pt"; |
| 56 | torch::jit::Module jit_model = torch::jit::load(pt_path); |
| 57 | //auto input = torch::zeros({1,3,224,224},torch::kFloat); |
| 58 | //auto output = jit_model.forward({input}); |
| 59 | |
| 60 | auto model = ConvReluBn(3,4,3); |
| 61 | auto input = torch::zeros({1,3,12,12},torch::kFloat); |
| 62 | auto input2 = torch::zeros({1,3,12,12},torch::kFloat); |
| 63 | auto output = input*input2; |
| 64 | output = model->forward(input); |
| 65 | std::cout<<output.sizes()<<std::endl; |
| 66 | std::cout.flush(); |
| 67 | |
| 68 | std::cout<<"Test output"; |