diff --git a/resnet50/1/0.pt b/resnet50/1/0.pt deleted file mode 100644 index e91ef16087b4536a334a803df07dbacbba019c30..0000000000000000000000000000000000000000 --- a/resnet50/1/0.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6e1afc4bc51ebf2d0ec3ca605d1f8cd7d3386eb9f34fdedfc99f5214b242295e -size 102587817 diff --git a/resnet50/1/shapes.json b/resnet50/1/shapes.json deleted file mode 100644 index 1ee82670352e27cb62fc0ec42803c9ebac096bfe..0000000000000000000000000000000000000000 --- a/resnet50/1/shapes.json +++ /dev/null @@ -1 +0,0 @@ -[[[1, 3, 224, 224], [1, 1000]]] \ No newline at end of file diff --git a/resnet50/11/0.pt b/resnet50/11/0.pt deleted file mode 100644 index 4f7cf7b688039e4b0c1ded0e4b8754f9ddd89012..0000000000000000000000000000000000000000 --- a/resnet50/11/0.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:38d9463efe4a63f5759738e3d7a1526a85345fb3b92e9875559157f89edc0c46 -size 5894671 diff --git a/resnet50/11/1.pt b/resnet50/11/1.pt deleted file mode 100644 index b855ba418bf75551afab93de59925838d33a7961..0000000000000000000000000000000000000000 --- a/resnet50/11/1.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0a4a4e958587478d1fb106d243145a6defed153e414036893150ad936a656010 -size 6096779 diff --git a/resnet50/11/10.pt b/resnet50/11/10.pt deleted file mode 100644 index 904268f0cc59d2285d8f488aa565647a458d50cf..0000000000000000000000000000000000000000 --- a/resnet50/11/10.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f7d20169158b0e2efdfab555be16e06a260b337d0a0286293fba38904b453b07 -size 8204426 diff --git a/resnet50/11/2.pt b/resnet50/11/2.pt deleted file mode 100644 index 87618d57013d6cf191ef85bf463c40a29fa8869e..0000000000000000000000000000000000000000 --- a/resnet50/11/2.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1720bb6cfc13567298048d0676176bdbe222a81741c7b10ae4223f8a8696e67e -size 4503545 diff --git a/resnet50/11/3.pt b/resnet50/11/3.pt deleted file mode 100644 index 91e367484541e7660d54ca6ea229950485b393d8..0000000000000000000000000000000000000000 --- a/resnet50/11/3.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a2d6dbc1dc4a093bca8650e7c2328bf7ef2a14c56a4d25075890e3eca13249d6 -size 4503545 diff --git a/resnet50/11/4.pt b/resnet50/11/4.pt deleted file mode 100644 index 422041e9470936f44acc01f8f43e49c93e5b9e99..0000000000000000000000000000000000000000 --- a/resnet50/11/4.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:07f5b252e06668cfd41a4cefdd611521d5bd03be075bd26448ba28bb7895d129 -size 4503545 diff --git a/resnet50/11/5.pt b/resnet50/11/5.pt deleted file mode 100644 index 0e24164240d875bba8a3cca6267dfb84fa465df5..0000000000000000000000000000000000000000 --- a/resnet50/11/5.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:acb342213cf6e5a512ab45028ff6ee0d2144c7a9a8a51d8d63a9cfbbd46c192f -size 4503545 diff --git a/resnet50/11/6.pt b/resnet50/11/6.pt deleted file mode 100644 index 83e6d43c3f53e0c540188f17132cbef81881c3fa..0000000000000000000000000000000000000000 --- a/resnet50/11/6.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0765a9ede8e520c493a8cc66cbac964f63b79178488ebd43123dc6b8197a5b33 -size 4503545 diff --git a/resnet50/11/7.pt b/resnet50/11/7.pt deleted file mode 100644 index 28a1de52eef616ed73812c3a67c4d57adfd02fd5..0000000000000000000000000000000000000000 --- a/resnet50/11/7.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:663921a42c137fae0d12ea1acbf8eb3f059cf8a6c9688f1c7ac496d53a25022d -size 24225739 diff --git a/resnet50/11/8.pt b/resnet50/11/8.pt deleted file mode 100644 index db503ce941f9360147812db507b0c4372e47027c..0000000000000000000000000000000000000000 --- a/resnet50/11/8.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0a9070ff7e022055879ce33c9bfe0e67a46cf1b6c5a1a359c2d4d383963569aa -size 17897531 diff --git a/resnet50/11/9.pt b/resnet50/11/9.pt deleted file mode 100644 index 25cc03c89db7872a2aedfe52651db0755be9c2de..0000000000000000000000000000000000000000 --- a/resnet50/11/9.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9e673dc370f22890807a76907dee63b0ee3168f44b03b580973a487843fe230b -size 17897531 diff --git a/resnet50/11/shapes.json b/resnet50/11/shapes.json deleted file mode 100644 index 24ef6f89b64725f8faf9574e1a4d359e80777d05..0000000000000000000000000000000000000000 --- a/resnet50/11/shapes.json +++ /dev/null @@ -1 +0,0 @@ -[[[1, 3, 224, 224], [1, 512, 28, 28]], [[1, 512, 28, 28], [1, 1024, 14, 14]], [[1, 1024, 14, 14], [1, 1024, 14, 14]], [[1, 1024, 14, 14], [1, 1024, 14, 14]], [[1, 1024, 14, 14], [1, 1024, 14, 14]], [[1, 1024, 14, 14], [1, 1024, 14, 14]], [[1, 1024, 14, 14], [1, 1024, 14, 14]], [[1, 1024, 14, 14], [1, 2048, 7, 7]], [[1, 2048, 7, 7], [1, 2048, 7, 7]], [[1, 2048, 7, 7], [1, 2048, 7, 7]], [[1, 2048, 7, 7], [1, 1000]]] \ No newline at end of file diff --git a/resnet50/19/0.pt b/resnet50/19/0.pt deleted file mode 100644 index 5faaee048d23d2e0bd8f198deedd11651a4fac0c..0000000000000000000000000000000000000000 --- a/resnet50/19/0.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c2c4c5555684af6f4b8bf0e18d06a0a6332df9ee50f079141b6e4bffc0bf5f0d -size 42639 diff --git a/resnet50/19/1.pt b/resnet50/19/1.pt deleted file mode 100644 index fd8ffffaa0964edf0e556ece25328f4c56aba5ea..0000000000000000000000000000000000000000 --- a/resnet50/19/1.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ed3e3d1a5010ee3e4c6faac6125bdd237b555670969662d9af99a4e61d87b752 -size 10213 diff --git a/resnet50/19/10.pt b/resnet50/19/10.pt deleted file mode 100644 index d4207ebc1e601ce59690efd2ff3b66d22f4ff462..0000000000000000000000000000000000000000 --- a/resnet50/19/10.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c083dc0a5e06b26f728a7bf90f1c5ec6768bbf4018ee576ea89d4df7120edafb -size 4503654 diff --git a/resnet50/19/11.pt b/resnet50/19/11.pt deleted file mode 100644 index 5eb96c1b98a69c7914747a4c2d4acf278bbac2e0..0000000000000000000000000000000000000000 --- a/resnet50/19/11.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3f7e2da0bec46dbe0ed1426d9d0749d1b65341375d4aebaf5c0819c2d4ee3654 -size 4503654 diff --git a/resnet50/19/12.pt b/resnet50/19/12.pt deleted file mode 100644 index efa151a0eb0b746a1e872b8c559dd2714bcffa6d..0000000000000000000000000000000000000000 --- a/resnet50/19/12.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9a0bdae605d12b842be648f9058e5b74f8cfdef33c67b8a1ba04ca86fb263edf -size 4503654 diff --git a/resnet50/19/13.pt b/resnet50/19/13.pt deleted file mode 100644 index 52f08a59644cc6f6a205ac168c97314ecddf4a2f..0000000000000000000000000000000000000000 --- a/resnet50/19/13.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:36580d5f6c997ee8e7793914a123e9c3de0f114e1f93f1c44f3cad7c931a0e96 -size 4503654 diff --git a/resnet50/19/14.pt b/resnet50/19/14.pt deleted file mode 100644 index 45ab16e1cddd33f9c1f75869b566d77b0904eec3..0000000000000000000000000000000000000000 --- a/resnet50/19/14.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:958597f0c57033719ca33bb8a7fa21cdd8e3fb58efc0bc3b4d6bf498cc61c3b0 -size 4503654 diff --git a/resnet50/19/15.pt b/resnet50/19/15.pt deleted file mode 100644 index f643be34a7206fe7d8708efa34c06b351b0451c5..0000000000000000000000000000000000000000 --- a/resnet50/19/15.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c03b79c6bbefc711c90312838f570cc4526111081225711d822f45b82a7b79ad -size 24225794 diff --git a/resnet50/19/16.pt b/resnet50/19/16.pt deleted file mode 100644 index 0771d697a4de061f74b14ca257f34e7cfc82bdfd..0000000000000000000000000000000000000000 --- a/resnet50/19/16.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a2360e3c330f6be8820752b5e79dc0eb438180bc24941de736b914b851b654fa -size 17897576 diff --git a/resnet50/19/17.pt b/resnet50/19/17.pt deleted file mode 100644 index 953e90e58e2f50d2e5a2d93fdf8cd96264249a87..0000000000000000000000000000000000000000 --- a/resnet50/19/17.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0c4f9edef5605c8d1e675425db2b9a4ea354d839c10a7d7edf2780582ccf9f75 -size 17897576 diff --git a/resnet50/19/18.pt b/resnet50/19/18.pt deleted file mode 100644 index 55d4cd137e6f7229ceb4ccbf5d3c58099204d9c0..0000000000000000000000000000000000000000 --- a/resnet50/19/18.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1b430e75747eb87f6d8dd8873a79d7a2c72af1730f015336eec0d70b5d0cfd49 -size 8204494 diff --git a/resnet50/19/2.pt b/resnet50/19/2.pt deleted file mode 100644 index 3a996a7f8563f171ea73806503e2b676b1666f0c..0000000000000000000000000000000000000000 --- a/resnet50/19/2.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6e7f6315b8ed99123bf7818acf59f06514c499e22626b9be0794e682ffadcf14 -size 331635 diff --git a/resnet50/19/3.pt b/resnet50/19/3.pt deleted file mode 100644 index ffd74b8088eb949685803e3e498963f597e1816c..0000000000000000000000000000000000000000 --- a/resnet50/19/3.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c12fba4e15f364d061e08fd09da114ed5bb5d9deea2a7cce9dcf8f1b93c911de -size 306957 diff --git a/resnet50/19/4.pt b/resnet50/19/4.pt deleted file mode 100644 index aa264c6bf9bab89b5f3f707a5450444ed1415c91..0000000000000000000000000000000000000000 --- a/resnet50/19/4.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5f7193204c3a29420ac3abb2684910c95cdcc217b07b7555796830fc8c3e0071 -size 306957 diff --git a/resnet50/19/5.pt b/resnet50/19/5.pt deleted file mode 100644 index ce31a372c486a89a0208fcaa705cf3085aad3892..0000000000000000000000000000000000000000 --- a/resnet50/19/5.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8207d7351acc994076909a47948f0921e9a5c6400cd214219b5cb55de9bdf397 -size 1554313 diff --git a/resnet50/19/6.pt b/resnet50/19/6.pt deleted file mode 100644 index 6da5eb68881d2f4fe12f9369920fd9919a844648..0000000000000000000000000000000000000000 --- a/resnet50/19/6.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5131e6ea422983a205b6450a5f9c2d14e9f9c06c8cd6dd83faf4a5964ea78a6a -size 1148795 diff --git a/resnet50/19/7.pt b/resnet50/19/7.pt deleted file mode 100644 index e3d70e9ceba519bddafdd014c6cda45a765e0477..0000000000000000000000000000000000000000 --- a/resnet50/19/7.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fff66ebaaaf25c92e4abd220898712372c343b2add91560c749b24975c3b06ba -size 1148795 diff --git a/resnet50/19/8.pt b/resnet50/19/8.pt deleted file mode 100644 index 02008fa4ae1381c4604dbd9c77d94d565f3197e7..0000000000000000000000000000000000000000 --- a/resnet50/19/8.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1c5a56b090f56b70269b90d135fbb1d2809a921aee2b36cdd13f9cd9677bb722 -size 1148795 diff --git a/resnet50/19/9.pt b/resnet50/19/9.pt deleted file mode 100644 index aeab17533e802495032f6fd62f0df40b55160e04..0000000000000000000000000000000000000000 --- a/resnet50/19/9.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e460b00d0085a96ed9b364037ce4dbeda68c6fb4a9457f62faf8e9cc39693512 -size 6096779 diff --git a/resnet50/2/0.pt b/resnet50/2/0.pt deleted file mode 100644 index 101b11356b9ed6984c9200c4486a1a95e7f1dc8a..0000000000000000000000000000000000000000 --- a/resnet50/2/0.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6027a8abe099fcdbcfd12929fc5c671cfd4a105490f5913abd479db22d4833d1 -size 34410255 diff --git a/resnet50/2/1.pt b/resnet50/2/1.pt deleted file mode 100644 index 31f9886cd90f99d0fb6c1d85cee3bfee43d9bbdf..0000000000000000000000000000000000000000 --- a/resnet50/2/1.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ae9f6e9c7e6ee095ce42532d9e1ad2cb2b002e276516c6bdeced029b895b3b3b -size 68187727 diff --git a/resnet50/2/shapes.json b/resnet50/2/shapes.json deleted file mode 100644 index 2dfd1b82f65c65443bb686aa8180275128c44b11..0000000000000000000000000000000000000000 --- a/resnet50/2/shapes.json +++ /dev/null @@ -1 +0,0 @@ -[[[1, 3, 224, 224], [1, 1024, 14, 14]], [[1, 1024, 14, 14], [1, 1000]]] \ No newline at end of file diff --git a/resnet50/3/0.pt b/resnet50/3/0.pt deleted file mode 100644 index 9dfb944a2aad4d0abea5dd122496138627e6f7da..0000000000000000000000000000000000000000 --- a/resnet50/3/0.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7eb796e07375831ce24677c6934ca67100ef83e16e40418918d87296fd95e097 -size 29925471 diff --git a/resnet50/3/1.pt b/resnet50/3/1.pt deleted file mode 100644 index b5da58e3eab9469d8d9f8f69330be78b66ffad3a..0000000000000000000000000000000000000000 --- a/resnet50/3/1.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c9f8f84bd2226a514903e0d4c933d872840623596eb97aade2a349be2afe40ed -size 28722039 diff --git a/resnet50/3/2.pt b/resnet50/3/2.pt deleted file mode 100644 index 6e12b7f872829c4cfd84162de2f016704e63f165..0000000000000000000000000000000000000000 --- a/resnet50/3/2.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3013f094218cecea08479adafd5d19451f6cc7732f8f7cc3d5f925bb86c4637c -size 43976255 diff --git a/resnet50/3/shapes.json b/resnet50/3/shapes.json deleted file mode 100644 index 76e2698a61f2d98b123be0f5b8fc8fdfbd7b6a99..0000000000000000000000000000000000000000 --- a/resnet50/3/shapes.json +++ /dev/null @@ -1 +0,0 @@ -[[[1, 3, 224, 224], [1, 1024, 14, 14]], [[1, 1024, 14, 14], [1, 2048, 7, 7]], [[1, 2048, 7, 7], [1, 1000]]] \ No newline at end of file diff --git a/resnet50/4/0.pt b/resnet50/4/0.pt deleted file mode 100644 index deac18a76b9cdda2d6d2cc21a982af9ff8f045e8..0000000000000000000000000000000000000000 --- a/resnet50/4/0.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:57cba8bb8e5f0208c789f0de5e28dec4429ee24cd25af2317258668a1b375c5e -size 25440751 diff --git a/resnet50/4/1.pt b/resnet50/4/1.pt deleted file mode 100644 index f4d9debb1324584ee661e357a84586565b0ada51..0000000000000000000000000000000000000000 --- a/resnet50/4/1.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e3f913b9d7a00ba0a0779ba2bd1892494364f511821e8740538ec459db61dfbf -size 8987991 diff --git a/resnet50/4/2.pt b/resnet50/4/2.pt deleted file mode 100644 index fec4005b238ee7226041616e89541c020d924d6f..0000000000000000000000000000000000000000 --- a/resnet50/4/2.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:42f0993fd3834c795458c78a0c25c97be6d993c09fa007ad1a7813d41f964a58 -size 24225739 diff --git a/resnet50/4/3.pt b/resnet50/4/3.pt deleted file mode 100644 index dc90fc7cc141ab90563c92bf58c5f793aa84343e..0000000000000000000000000000000000000000 --- a/resnet50/4/3.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6a63ac85643e50ba9d3b15fd6b8797cfb403fe25a696d51323af54957d6c6f64 -size 43976255 diff --git a/resnet50/4/shapes.json b/resnet50/4/shapes.json deleted file mode 100644 index ec91192bbb72cc5028aebfb6321918343fbab8e2..0000000000000000000000000000000000000000 --- a/resnet50/4/shapes.json +++ /dev/null @@ -1 +0,0 @@ -[[[1, 3, 224, 224], [1, 1024, 14, 14]], [[1, 1024, 14, 14], [1, 1024, 14, 14]], [[1, 1024, 14, 14], [1, 2048, 7, 7]], [[1, 2048, 7, 7], [1, 1000]]] \ No newline at end of file diff --git a/resnet50/5/0.pt b/resnet50/5/0.pt deleted file mode 100644 index d86ed4cd1d23e53b161f15abe2276f5b96b56962..0000000000000000000000000000000000000000 --- a/resnet50/5/0.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0c97755c6226acf2a70dae22110e3dd4635f92ec09f5174bea56a1a7f143d296 -size 16471311 diff --git a/resnet50/5/1.pt b/resnet50/5/1.pt deleted file mode 100644 index 117ce0b9b2a457fa48247c28d513cb3b1b8218f9..0000000000000000000000000000000000000000 --- a/resnet50/5/1.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:738f00b1cb22709297872c335a7488aebee6cf2a74a3579f4e998b35ad12ce6b -size 17957011 diff --git a/resnet50/5/2.pt b/resnet50/5/2.pt deleted file mode 100644 index fec4005b238ee7226041616e89541c020d924d6f..0000000000000000000000000000000000000000 --- a/resnet50/5/2.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:42f0993fd3834c795458c78a0c25c97be6d993c09fa007ad1a7813d41f964a58 -size 24225739 diff --git a/resnet50/5/3.pt b/resnet50/5/3.pt deleted file mode 100644 index 3d53ab3fba36626519bae6a69cbe32da67a7802c..0000000000000000000000000000000000000000 --- a/resnet50/5/3.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ab461d5b119bb4559277faef662678200eef206080043621646ea0d680668c97 -size 17897531 diff --git a/resnet50/5/4.pt b/resnet50/5/4.pt deleted file mode 100644 index 317c836e18f247a49b3063a67509e41895a49811..0000000000000000000000000000000000000000 --- a/resnet50/5/4.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ba8991f5716aae8e1578d053787d152dde83dbe6739334d0d2e26caa7a5bd1c1 -size 26097825 diff --git a/resnet50/5/shapes.json b/resnet50/5/shapes.json deleted file mode 100644 index 5dea36b02fad81aa3f7360eff2b20403dc7aa892..0000000000000000000000000000000000000000 --- a/resnet50/5/shapes.json +++ /dev/null @@ -1 +0,0 @@ -[[[1, 3, 224, 224], [1, 1024, 14, 14]], [[1, 1024, 14, 14], [1, 1024, 14, 14]], [[1, 1024, 14, 14], [1, 2048, 7, 7]], [[1, 2048, 7, 7], [1, 2048, 7, 7]], [[1, 2048, 7, 7], [1, 1000]]] \ No newline at end of file diff --git a/resnet50/6/0.pt b/resnet50/6/0.pt deleted file mode 100644 index d86ed4cd1d23e53b161f15abe2276f5b96b56962..0000000000000000000000000000000000000000 --- a/resnet50/6/0.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0c97755c6226acf2a70dae22110e3dd4635f92ec09f5174bea56a1a7f143d296 -size 16471311 diff --git a/resnet50/6/1.pt b/resnet50/6/1.pt deleted file mode 100644 index c3c4eae7ca11ac38efaae1ed2ce1ca82f3173dd2..0000000000000000000000000000000000000000 --- a/resnet50/6/1.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8c8e095b4a0b217e8f2bd041a8f9f2d28f3e41149ca62f9c25fbb3747c5ca296 -size 13472437 diff --git a/resnet50/6/2.pt b/resnet50/6/2.pt deleted file mode 100644 index bab1eac675c4bc6c0e95bb26eef337645a37a3a7..0000000000000000000000000000000000000000 --- a/resnet50/6/2.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:75679cfe87e055b3fa0b63edefd5b66a09b95ecf840ac79b97d14e0703954ac9 -size 4503545 diff --git a/resnet50/6/3.pt b/resnet50/6/3.pt deleted file mode 100644 index c36cf8713bb363d3fab661d9823806a1d152dc12..0000000000000000000000000000000000000000 --- a/resnet50/6/3.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:75567c522b698e93f04c2887fa9cf3648ce8dda3975468d9f949d184018ff93e -size 24225739 diff --git a/resnet50/6/4.pt b/resnet50/6/4.pt deleted file mode 100644 index 3040974895e618b8c5d17b2e795cf9c53a7e5f81..0000000000000000000000000000000000000000 --- a/resnet50/6/4.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4c34069d8076d88d6737cefafcdf3f54ff34d8f361e2c475e664ffe8e3a8e17a -size 17897531 diff --git a/resnet50/6/5.pt b/resnet50/6/5.pt deleted file mode 100644 index f89e8e384a7e46afb4f4bd3aaf9cfb67adfe4a87..0000000000000000000000000000000000000000 --- a/resnet50/6/5.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0d49f80990bf0aaf0c508e247902a58fadf878526693a7b9e5f606dc8a5eab0d -size 26097825 diff --git a/resnet50/6/shapes.json b/resnet50/6/shapes.json deleted file mode 100644 index ffc881e1d4ab453f3d2aa9ad5ef233f6179f8ca1..0000000000000000000000000000000000000000 --- a/resnet50/6/shapes.json +++ /dev/null @@ -1 +0,0 @@ -[[[1, 3, 224, 224], [1, 1024, 14, 14]], [[1, 1024, 14, 14], [1, 1024, 14, 14]], [[1, 1024, 14, 14], [1, 1024, 14, 14]], [[1, 1024, 14, 14], [1, 2048, 7, 7]], [[1, 2048, 7, 7], [1, 2048, 7, 7]], [[1, 2048, 7, 7], [1, 1000]]] \ No newline at end of file diff --git a/resnet50/7/0.pt b/resnet50/7/0.pt deleted file mode 100644 index 36c6a951773b2f2af2b59a8f3bfd242c7eab0fc6..0000000000000000000000000000000000000000 --- a/resnet50/7/0.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c5e136290e84de256007357bf04a26700138bf1fdba5c2c6feec69df2cd4cba5 -size 11981821 diff --git a/resnet50/7/1.pt b/resnet50/7/1.pt deleted file mode 100644 index 6bf47b7459444c37e76eb5c01b45b8820a55c173..0000000000000000000000000000000000000000 --- a/resnet50/7/1.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:28c42a4fd63daa194ce90418a2f076fa21e66df9102c4afd2b1f8a7093623c02 -size 13472437 diff --git a/resnet50/7/2.pt b/resnet50/7/2.pt deleted file mode 100644 index 9b2850b5c54f958dee6c1d54cae3872caa8e48cf..0000000000000000000000000000000000000000 --- a/resnet50/7/2.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7f3f86f9753762474c5259bcb06686020d70c5d757239f1217f473370db0e696 -size 8987991 diff --git a/resnet50/7/3.pt b/resnet50/7/3.pt deleted file mode 100644 index c36cf8713bb363d3fab661d9823806a1d152dc12..0000000000000000000000000000000000000000 --- a/resnet50/7/3.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:75567c522b698e93f04c2887fa9cf3648ce8dda3975468d9f949d184018ff93e -size 24225739 diff --git a/resnet50/7/4.pt b/resnet50/7/4.pt deleted file mode 100644 index 3040974895e618b8c5d17b2e795cf9c53a7e5f81..0000000000000000000000000000000000000000 --- a/resnet50/7/4.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4c34069d8076d88d6737cefafcdf3f54ff34d8f361e2c475e664ffe8e3a8e17a -size 17897531 diff --git a/resnet50/7/5.pt b/resnet50/7/5.pt deleted file mode 100644 index 422fb213d2d619a66419b081bf2dfdb2733c9a6c..0000000000000000000000000000000000000000 --- a/resnet50/7/5.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3192b54d06fcfbb9167a6ddc780fe081ad12ef60bac72e23c16db33646cbe187 -size 17897531 diff --git a/resnet50/7/6.pt b/resnet50/7/6.pt deleted file mode 100644 index a02b7345e407de05dd2f5ba0c742fe91f16af393..0000000000000000000000000000000000000000 --- a/resnet50/7/6.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:79b187d39bd5241168efb83a082124b88ce811a9ba7a9a263deb28240253f805 -size 8204407 diff --git a/resnet50/7/shapes.json b/resnet50/7/shapes.json deleted file mode 100644 index a4c377228d87ef5599d38104b14c1842215486fe..0000000000000000000000000000000000000000 --- a/resnet50/7/shapes.json +++ /dev/null @@ -1 +0,0 @@ -[[[1, 3, 224, 224], [1, 1024, 14, 14]], [[1, 1024, 14, 14], [1, 1024, 14, 14]], [[1, 1024, 14, 14], [1, 1024, 14, 14]], [[1, 1024, 14, 14], [1, 2048, 7, 7]], [[1, 2048, 7, 7], [1, 2048, 7, 7]], [[1, 2048, 7, 7], [1, 2048, 7, 7]], [[1, 2048, 7, 7], [1, 1000]]] \ No newline at end of file diff --git a/resnet50/8/0.pt b/resnet50/8/0.pt deleted file mode 100644 index 4f7cf7b688039e4b0c1ded0e4b8754f9ddd89012..0000000000000000000000000000000000000000 --- a/resnet50/8/0.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:38d9463efe4a63f5759738e3d7a1526a85345fb3b92e9875559157f89edc0c46 -size 5894671 diff --git a/resnet50/8/1.pt b/resnet50/8/1.pt deleted file mode 100644 index 0860c32c2dee9127e43b15ff263b28994100b2c9..0000000000000000000000000000000000000000 --- a/resnet50/8/1.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:df4043e2761a4a1ba807e567e0afbf9c8f4a063eebf0485677ff1d2ad7e85458 -size 10586057 diff --git a/resnet50/8/2.pt b/resnet50/8/2.pt deleted file mode 100644 index a45417f71666a26df96054e3ecc667514df92b35..0000000000000000000000000000000000000000 --- a/resnet50/8/2.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:12b88da34ec3ae3151ee8c5747938b5ce927d96fdb9792ea1e06c3d6096395c8 -size 8987991 diff --git a/resnet50/8/3.pt b/resnet50/8/3.pt deleted file mode 100644 index 196a7f22ea605279aec7af09ff76fb23008dc795..0000000000000000000000000000000000000000 --- a/resnet50/8/3.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cec55994abf9b5d07d69cc47ce21db40210f090c890e4c49c9e5cac8854c2e1a -size 8987991 diff --git a/resnet50/8/4.pt b/resnet50/8/4.pt deleted file mode 100644 index c2d5a84860e372b0853fc71a1f7bbefde3822818..0000000000000000000000000000000000000000 --- a/resnet50/8/4.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:68c23557f91d0eb5469e3035fa4bcc57b5b20084ed4da4257268068ab5659afe -size 24225739 diff --git a/resnet50/8/5.pt b/resnet50/8/5.pt deleted file mode 100644 index 37601f46408ef1c54933ed94306a8508288b22a7..0000000000000000000000000000000000000000 --- a/resnet50/8/5.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:00d53eb0ea84cc036c4677555266e569dbf20323fa0966f66a8dafca5201f40d -size 17897531 diff --git a/resnet50/8/6.pt b/resnet50/8/6.pt deleted file mode 100644 index 3ba76b2f9a7dd6eb8dc3915c0582a9eb76d8aa0e..0000000000000000000000000000000000000000 --- a/resnet50/8/6.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b6aa727f9d96fed5ddabdef7af74bd246cd4f43f13c7e83728e34380cf96ebee -size 17897531 diff --git a/resnet50/8/7.pt b/resnet50/8/7.pt deleted file mode 100644 index 13c26a6e56f8b77f01a83152585097ae14e94244..0000000000000000000000000000000000000000 --- a/resnet50/8/7.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3b4267c8bf931e8155a24b49b87044cf27890f883d02d14c7c7f885ac294e32d -size 8204407 diff --git a/resnet50/8/shapes.json b/resnet50/8/shapes.json deleted file mode 100644 index dc21bdacfc0846e0f44cd2f955449a2d27a0ea81..0000000000000000000000000000000000000000 --- a/resnet50/8/shapes.json +++ /dev/null @@ -1 +0,0 @@ -[[[1, 3, 224, 224], [1, 512, 28, 28]], [[1, 512, 28, 28], [1, 1024, 14, 14]], [[1, 1024, 14, 14], [1, 1024, 14, 14]], [[1, 1024, 14, 14], [1, 1024, 14, 14]], [[1, 1024, 14, 14], [1, 2048, 7, 7]], [[1, 2048, 7, 7], [1, 2048, 7, 7]], [[1, 2048, 7, 7], [1, 2048, 7, 7]], [[1, 2048, 7, 7], [1, 1000]]] \ No newline at end of file diff --git a/resnet50/9/0.pt b/resnet50/9/0.pt deleted file mode 100644 index 4f7cf7b688039e4b0c1ded0e4b8754f9ddd89012..0000000000000000000000000000000000000000 --- a/resnet50/9/0.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:38d9463efe4a63f5759738e3d7a1526a85345fb3b92e9875559157f89edc0c46 -size 5894671 diff --git a/resnet50/9/1.pt b/resnet50/9/1.pt deleted file mode 100644 index b855ba418bf75551afab93de59925838d33a7961..0000000000000000000000000000000000000000 --- a/resnet50/9/1.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0a4a4e958587478d1fb106d243145a6defed153e414036893150ad936a656010 -size 6096779 diff --git a/resnet50/9/2.pt b/resnet50/9/2.pt deleted file mode 100644 index 5cf5e26cff993342f83439fbe529de51526d706b..0000000000000000000000000000000000000000 --- a/resnet50/9/2.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0e015a4fd7614b48cbf999a156a65e127b2a8190882c0de7bc481d7db23d173b -size 8987991 diff --git a/resnet50/9/3.pt b/resnet50/9/3.pt deleted file mode 100644 index 2fcaf74baacd284ca1246cfdef241e247294b84b..0000000000000000000000000000000000000000 --- a/resnet50/9/3.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:842a608ac624816ba324096bb65fac067bd1cde8ec2371bd069521779555a8ad -size 8987991 diff --git a/resnet50/9/4.pt b/resnet50/9/4.pt deleted file mode 100644 index 0d95e9d3217496097062951ddef4891ca5e40b67..0000000000000000000000000000000000000000 --- a/resnet50/9/4.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5eddd894c948ecb23f184dfae23a0fd961c54ba391f4ef6fd17a65023f00853d -size 4503545 diff --git a/resnet50/9/5.pt b/resnet50/9/5.pt deleted file mode 100644 index 09c44d60a672f7e4fb44897007953eae8b458586..0000000000000000000000000000000000000000 --- a/resnet50/9/5.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3cd37903147ce3144170afa43e1f51d06894017e910fcc1cb331cf9a0b0225ed -size 24225739 diff --git a/resnet50/9/6.pt b/resnet50/9/6.pt deleted file mode 100644 index d6aca7f41056cd22f9e768b3ffcbb4c3109971f0..0000000000000000000000000000000000000000 --- a/resnet50/9/6.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5b3e6de86e1066f1e3089cc30331233e75d8d4e7b477d6ed9c1c73fded58783a -size 17897531 diff --git a/resnet50/9/7.pt b/resnet50/9/7.pt deleted file mode 100644 index f1d32a3b5d5298993ebd8bd74fd8c0d4629f0a3f..0000000000000000000000000000000000000000 --- a/resnet50/9/7.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3df1a05767b4823790b944e6e965a5d0b1622f7146ec582495ea65d80d6c3828 -size 17897531 diff --git a/resnet50/9/8.pt b/resnet50/9/8.pt deleted file mode 100644 index 436a38f418860d3e3679378622e115af16390424..0000000000000000000000000000000000000000 --- a/resnet50/9/8.pt +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:054e65ee9f9ad079a8f2fbd25088a530b7121a39c74d0d50ff638596ef2645c7 -size 8204407 diff --git a/resnet50/9/shapes.json b/resnet50/9/shapes.json deleted file mode 100644 index 2e80c63a182063077224a5406c3f489776ac46be..0000000000000000000000000000000000000000 --- a/resnet50/9/shapes.json +++ /dev/null @@ -1 +0,0 @@ -[[[1, 3, 224, 224], [1, 512, 28, 28]], [[1, 512, 28, 28], [1, 1024, 14, 14]], [[1, 1024, 14, 14], [1, 1024, 14, 14]], [[1, 1024, 14, 14], [1, 1024, 14, 14]], [[1, 1024, 14, 14], [1, 1024, 14, 14]], [[1, 1024, 14, 14], [1, 2048, 7, 7]], [[1, 2048, 7, 7], [1, 2048, 7, 7]], [[1, 2048, 7, 7], [1, 2048, 7, 7]], [[1, 2048, 7, 7], [1, 1000]]] \ No newline at end of file diff --git a/resnet50/__pycache__/main_torch.cpython-311.pyc b/resnet50/__pycache__/main_torch.cpython-311.pyc deleted file mode 100644 index f1d5dd645723fd852f623eb625e491df21437841..0000000000000000000000000000000000000000 Binary files a/resnet50/__pycache__/main_torch.cpython-311.pyc and /dev/null differ diff --git a/resnet50/main_torch.py b/resnet50/main_torch.py deleted file mode 100644 index c789ddc8aac1b3bcb8b167ac2ebe623d0a10d7e1..0000000000000000000000000000000000000000 --- a/resnet50/main_torch.py +++ /dev/null @@ -1,143 +0,0 @@ -import os -import time -import torch -import torch.nn.functional as F -from torchvision import transforms -from PIL import Image -import io - -def read_paths_images(directory, dataset_size): - paths = [directory + f for f in os.listdir(directory) if - os.path.isfile(os.path.join(directory, f))] - paths = paths[:dataset_size] - return paths - -def load_images(urls): - images_data = [] - for image in urls: - with open(image, 'rb') as file: - file_content = file.read() - images_data.append(file_content) - return images_data - -def transform_images(images_data): - # Define the transformations - composed_transforms = transforms.Compose([ - transforms.ToTensor(), - transforms.Lambda(lambda x: F.grid_sample(x.unsqueeze(0), torch.nn.functional.affine_grid(torch.eye(2, 3, dtype=torch.float32).unsqueeze(0), [1, 3, 224, 224], True), mode='bilinear', padding_mode='reflection', align_corners=True)), - transforms.Lambda(lambda x: x.squeeze(0)), - transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) - ]) - tensors = [] - for image_data in images_data: - image=Image.open(io.BytesIO(image_data)).convert('RGB') - transformed_img = composed_transforms(image) - tensors.append(transformed_img) - stacked_tensors = torch.stack(tensors) - return stacked_tensors - -def transform(images_data): - start= time.time() - normalized_batch = transform_images(images_data) - end = time.time() - # print("Transformation time: ", end-start) - return normalized_batch - -def inference(model, normalized_batch): - labels = [] - probabilities = [] - start = time.time() - model.eval() - with torch.no_grad(): - out = model(normalized_batch) - end = time.time() - out = torch.softmax(out, dim=1) - pred_probs = out.numpy() - preds = pred_probs.argmax(axis=1) - for i in range(len(pred_probs)): - probabilities.append(pred_probs[i][0]) - if (preds[i] == 0): - labels.append('off') - else: - labels.append('on') - results = [{'prob': float(prob), 'label': label} for prob, label in zip(probabilities, labels)] - # print("Inference time: ", end - start) - return results - -def inference_two_models(model1, model2, normalized_batch): - labels = [] - probabilities = [] - start = time.time() - model1.eval() - model2.eval() - with torch.no_grad(): - out = model1(normalized_batch) - out = model2(out) - end = time.time() - out = torch.softmax(out, dim=1) - pred_probs = out.numpy() - preds = pred_probs.argmax(axis=1) - for i in range(len(pred_probs)): - probabilities.append(pred_probs[i][0]) - if (preds[i] == 0): - labels.append('off') - else: - labels.append('on') - results = [{'prob': float(prob), 'label': label} for prob, label in zip(probabilities, labels)] - # print("Inference time: ", end - start) - return results - -def inference_three_models(model1, model2, model3, normalized_batch): - labels = [] - probabilities = [] - start = time.time() - model1.eval() - model2.eval() - model3.eval() - with torch.no_grad(): - out = model1(normalized_batch) - out = model2(out) - out = model3(out) - end = time.time() - out = torch.softmax(out, dim=1) - pred_probs = out.numpy() - preds = pred_probs.argmax(axis=1) - for i in range(len(pred_probs)): - probabilities.append(pred_probs[i][0]) - if (preds[i] == 0): - labels.append('off') - else: - labels.append('on') - results = [{'prob': float(prob), 'label': label} for prob, label in zip(probabilities, labels)] - # print("Inference time: ", end - start) - return results - - -def inference_mult_models(models, normalized_batch): - labels = [] - probabilities = [] - times_parts = [] - - - for model in models: - model.eval() - out = normalized_batch - with torch.no_grad(): - for model in models: - start = time.time() - out = model(out) - end = time.time() - times_parts.append(end-start) - - out = torch.softmax(out, dim=1) - pred_probs = out.numpy() - preds = pred_probs.argmax(axis=1) - for i in range(len(pred_probs)): - probabilities.append(pred_probs[i][0]) - if (preds[i] == 0): - labels.append('off') - else: - labels.append('on') - results = [{'prob': float(prob), 'label': label} for prob, label in zip(probabilities, labels)] - # print("Inference time: ", end - start) - return results, times_parts diff --git a/resnet50/models/new_model.pth b/resnet50/models/new_model.pth deleted file mode 100644 index 11aa4b0dcf2bf5e67ef924ed3009663e4a34a402..0000000000000000000000000000000000000000 --- a/resnet50/models/new_model.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f74319ad298ddf3be5cfab2848942e40801e8149dff9c69ddff941531ba3ce49 -size 102845882 diff --git a/resnet50/models/part1.pth b/resnet50/models/part1.pth deleted file mode 100644 index 2556801ed81d2ba912e48707234aea5e3d07ca1f..0000000000000000000000000000000000000000 --- a/resnet50/models/part1.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a6fc0024d12311e3f69c4ed0481b69cd69dc7b3ebf04fe3533f8a800fa47f4c3 -size 94355378 diff --git a/resnet50/models/part2.pth b/resnet50/models/part2.pth deleted file mode 100644 index 51ec50fff08ef4497da80b50ad1ab0311084ceb4..0000000000000000000000000000000000000000 --- a/resnet50/models/part2.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:25af07961dc475a7679b505f87b6385e167a7293c754d4c6237c6de092e9c190 -size 8476424 diff --git a/resnet50/models/part3.pth b/resnet50/models/part3.pth deleted file mode 100644 index 4379d9f2bbe8889fcc0c2a38b7e12ff193d3a0ed..0000000000000000000000000000000000000000 --- a/resnet50/models/part3.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:40c150c7bd3b2a77a733914069e05521febc4134cab010a07a4f25d17bcb8c6b -size 1624 diff --git a/resnet50/models/parts/0.pth b/resnet50/models/parts/0.pth deleted file mode 100644 index 1b58db9193470ed6a87814b4b0521649a80eafb3..0000000000000000000000000000000000000000 --- a/resnet50/models/parts/0.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:de7d23d1c076c745069e1e6d762aaadde01b2bfb694404d11e9821ad35275c2a -size 39934 diff --git a/resnet50/models/parts/1.pth b/resnet50/models/parts/1.pth deleted file mode 100644 index 37b73b7c41c098c76946420fd9c6a0b5a86eefc5..0000000000000000000000000000000000000000 --- a/resnet50/models/parts/1.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:51bf842cbb61558f050c7869a71c1e7392adb553a73a6c4037cdbf91d974f3eb -size 4054 diff --git a/resnet50/models/parts/10.pth b/resnet50/models/parts/10.pth deleted file mode 100644 index 875a99b608ed14f61df115d5fb7bb382de85dfb2..0000000000000000000000000000000000000000 --- a/resnet50/models/parts/10.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:99c9c01226f090d976867ce11ddc28407396791d38ce6da711e693dcdd733ffb -size 1134194 diff --git a/resnet50/models/parts/11.pth b/resnet50/models/parts/11.pth deleted file mode 100644 index deb7296b25d00d63ac3f5b10aebc9ba41518c103..0000000000000000000000000000000000000000 --- a/resnet50/models/parts/11.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:068cc11d82fda1bcc554176ffc0681127cfe057f4ba5e7f7ef10e337c81eccd9 -size 6080194 diff --git a/resnet50/models/parts/12.pth b/resnet50/models/parts/12.pth deleted file mode 100644 index 5aad99fbaa4efd725fef5fef701862c96d87d95b..0000000000000000000000000000000000000000 --- a/resnet50/models/parts/12.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:37c6a671c668a57fd564d793996375af4fb98a72c6854ed68c0675c1474c9147 -size 4488818 diff --git a/resnet50/models/parts/13.pth b/resnet50/models/parts/13.pth deleted file mode 100644 index 9f1d0d396a3e99e5604fb54c355bf98d1f06613a..0000000000000000000000000000000000000000 --- a/resnet50/models/parts/13.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:64eff2128cafb717b7c87250deea54c209cb8a7aebe65ad2cebb0850bf132222 -size 4488818 diff --git a/resnet50/models/parts/14.pth b/resnet50/models/parts/14.pth deleted file mode 100644 index 2d81439e0f2b1069fa069ed4b181ce266b81cdd5..0000000000000000000000000000000000000000 --- a/resnet50/models/parts/14.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:207ea7513cd2bbc38a08b52893ee29773521ea6a2d97356d0f43b7cc3b6ef21a -size 4488818 diff --git a/resnet50/models/parts/15.pth b/resnet50/models/parts/15.pth deleted file mode 100644 index e58f8578c30062121f923060786c1fafde2c3957..0000000000000000000000000000000000000000 --- a/resnet50/models/parts/15.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:176495a696f29fb5506f344193e09426ba730a6768855211e412a9fdefbc3b9c -size 4488818 diff --git a/resnet50/models/parts/16.pth b/resnet50/models/parts/16.pth deleted file mode 100644 index eb3de49489dae1ce2b9121c9274ac9fa641a031f..0000000000000000000000000000000000000000 --- a/resnet50/models/parts/16.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1d7c313213b20a609ad35d1944eef67b34868cb69619960107b2ebcc42d317bc -size 4488818 diff --git a/resnet50/models/parts/17.pth b/resnet50/models/parts/17.pth deleted file mode 100644 index 9795ed4dad2f9e4bf1c519e3f8421fade607b466..0000000000000000000000000000000000000000 --- a/resnet50/models/parts/17.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:05a8e2ca4bc63328826029a8a02bf499b199c9b82907ca1926484f2340a77a7c -size 24209090 diff --git a/resnet50/models/parts/18.pth b/resnet50/models/parts/18.pth deleted file mode 100644 index 7556a069dc7f73f9e44015d2624d2787b52d6fdf..0000000000000000000000000000000000000000 --- a/resnet50/models/parts/18.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:00616170ff84c3109a510bcc403e8cc54832eb2cc85a0a4dc8fdbcc0c0b4aee2 -size 17882738 diff --git a/resnet50/models/parts/19.pth b/resnet50/models/parts/19.pth deleted file mode 100644 index 8f94dde7ae9ab6f0c5c2858a4b374cd9d221e3e0..0000000000000000000000000000000000000000 --- a/resnet50/models/parts/19.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:02c4a499fba7434c7c232fb358d31fcaf48d4204152427996d6e2845a37cf1e8 -size 17882738 diff --git a/resnet50/models/parts/2.pth b/resnet50/models/parts/2.pth deleted file mode 100644 index e229e6a6c8df8c50d9484dd423482658a3529a01..0000000000000000000000000000000000000000 --- a/resnet50/models/parts/2.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cc911a3064761b8ea977c9d72f9298f375b41b13363eabacc63278a10041f4e4 -size 1864 diff --git a/resnet50/models/parts/20.pth b/resnet50/models/parts/20.pth deleted file mode 100644 index 3d6012064ae54fcfe28b455add86303ac768919e..0000000000000000000000000000000000000000 --- a/resnet50/models/parts/20.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:17330e8a1d439c22ffe5304095e44fbea141cf65691f4d907aecbe076667fa1f -size 2316 diff --git a/resnet50/models/parts/21.pth b/resnet50/models/parts/21.pth deleted file mode 100644 index 62e2be97c2dbdc1afd16dd8167b38b8b684b5c16..0000000000000000000000000000000000000000 --- a/resnet50/models/parts/21.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:85ccd248c4d3b10e3743dded4922887c8f4abb58f67b8281d838a462d29297a5 -size 1804 diff --git a/resnet50/models/parts/22.pth b/resnet50/models/parts/22.pth deleted file mode 100644 index eea7c2bd8f7135d5522975e5e49ba11c49802fb1..0000000000000000000000000000000000000000 --- a/resnet50/models/parts/22.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1e84d67f5a14bbefbd2853e32bcc873f580ef806c639f4be2c25c2761e082283 -size 68639 diff --git a/resnet50/models/parts/23.pth b/resnet50/models/parts/23.pth deleted file mode 100644 index 9b37c38da5f05bb6920a14424fabed3ce6f970bb..0000000000000000000000000000000000000000 --- a/resnet50/models/parts/23.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c677340980e741758bffc3b2a5e546544e9d5957a2604a6e90b71847c18e469a -size 1868 diff --git a/resnet50/models/parts/24.pth b/resnet50/models/parts/24.pth deleted file mode 100644 index f32d2f454d223107f5911f9c57208043a9f65e65..0000000000000000000000000000000000000000 --- a/resnet50/models/parts/24.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bdfc9669cf74714a26fc700c1668cd325110ca356febae8d2b2add5a91c1cbcb -size 1676 diff --git a/resnet50/models/parts/25.pth b/resnet50/models/parts/25.pth deleted file mode 100644 index f2dd5baba604b3b8bbcf46337808be820f5a12d5..0000000000000000000000000000000000000000 --- a/resnet50/models/parts/25.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b8eec1f0573208ee9d43891aac90580e168c0fc27905bd4284a5f4c7a56b101d -size 8393018 diff --git a/resnet50/models/parts/26.pth b/resnet50/models/parts/26.pth deleted file mode 100644 index 52543dbc1a35464d99b1f3c3d9329769f72d98a7..0000000000000000000000000000000000000000 --- a/resnet50/models/parts/26.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:35cc56440fce58b657271f3817647d4df87b01329f98e512c105fb3d6ecd95a7 -size 1868 diff --git a/resnet50/models/parts/27.pth b/resnet50/models/parts/27.pth deleted file mode 100644 index bf571e3cfa4382ed278ab68ac75d66dc4a5eefac..0000000000000000000000000000000000000000 --- a/resnet50/models/parts/27.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4d3cfa74b6c279ec69a58e28da67c17c2eb17616ac7f7f664abce6d61dca1876 -size 11295 diff --git a/resnet50/models/parts/28.pth b/resnet50/models/parts/28.pth deleted file mode 100644 index 9a464cb664f7bc841aea8af01cafe6640281ce3f..0000000000000000000000000000000000000000 --- a/resnet50/models/parts/28.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c073ae62977d5f54c4f2e3ff445bf0c3fc62a28552f824cee095f024c80e5adb -size 1868 diff --git a/resnet50/models/parts/29.pth b/resnet50/models/parts/29.pth deleted file mode 100644 index a6b781425b5322575f9cc5d544c51a4ab304fb90..0000000000000000000000000000000000000000 --- a/resnet50/models/parts/29.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7916e4e42271550498e79a163c23a7e79ca42fa44edf0c0b96c37c1419060701 -size 1676 diff --git a/resnet50/models/parts/3.pth b/resnet50/models/parts/3.pth deleted file mode 100644 index 45d1024724e005cf9901692b5b282c1b822930fe..0000000000000000000000000000000000000000 --- a/resnet50/models/parts/3.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:37e27ec3d3c6060d52ee521bd8d01d12690b2b4cd5e21eae1381a0cad394a456 -size 1928 diff --git a/resnet50/models/parts/30.pth b/resnet50/models/parts/30.pth deleted file mode 100644 index 2ad039ef1681909ad8384395b3d1fb5d0b2ef69e..0000000000000000000000000000000000000000 --- a/resnet50/models/parts/30.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:83eb119d7d704b1c04a8a0f06e4b9452716c8ca91726172e0d101733a23e52c2 -size 6522 diff --git a/resnet50/models/parts/4.pth b/resnet50/models/parts/4.pth deleted file mode 100644 index 64c5ea9da252a65eb7f80abd61f461b920791e68..0000000000000000000000000000000000000000 --- a/resnet50/models/parts/4.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1632cbaa1a0e15ca63525bb79a00a23b744a182c7d5a8612dc0adf1dae35873b -size 314918 diff --git a/resnet50/models/parts/5.pth b/resnet50/models/parts/5.pth deleted file mode 100644 index cdd8f9a10bb97a7f15ea12bb806f1273261c2e9a..0000000000000000000000000000000000000000 --- a/resnet50/models/parts/5.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c423df93d3f1a7dd55cacc718df5e768be9345c472a440360625ede863239f3c -size 292380 diff --git a/resnet50/models/parts/6.pth b/resnet50/models/parts/6.pth deleted file mode 100644 index afa8be205cbf0ade0fa2c9f84becb0a1fde5fdef..0000000000000000000000000000000000000000 --- a/resnet50/models/parts/6.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b7211147fc2778a79bb33374725c53c9260393a8a3ce42ebbd25d149d40f1b37 -size 292380 diff --git a/resnet50/models/parts/7.pth b/resnet50/models/parts/7.pth deleted file mode 100644 index a7f3d8fc401a298b2d4ce00dd822b7b3e6a8c1f1..0000000000000000000000000000000000000000 --- a/resnet50/models/parts/7.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3887048232e3c24ec9b983d1fdc398f09e29030a85a7b1b4511ed19c86f1f885 -size 1537574 diff --git a/resnet50/models/parts/8.pth b/resnet50/models/parts/8.pth deleted file mode 100644 index 1cebf7dbd2206a5bc7b2cf88db887d07fc186275..0000000000000000000000000000000000000000 --- a/resnet50/models/parts/8.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7d1ed6a398baf17d5a787bc3c8b244b7a0025968bfdb9c15d28ac5776271ea19 -size 1134108 diff --git a/resnet50/models/parts/9.pth b/resnet50/models/parts/9.pth deleted file mode 100644 index 9566fdcb2a11e80110c753af322f81a6562c47d6..0000000000000000000000000000000000000000 --- a/resnet50/models/parts/9.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:19685e8582f23e67a81b8df22fe5bcb8211f3c3c621b08003e8b4f156d6bfed5 -size 1134108 diff --git a/resnet50/models/pytorch_model.pth b/resnet50/models/pytorch_model.pth deleted file mode 100644 index 9db267dd5296550cf9467543c1e5d4f9c06bfcd9..0000000000000000000000000000000000000000 --- a/resnet50/models/pytorch_model.pth +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:570d2703fdc7bb6361ce6ffffe65fc6af6c25999f900b83af4a18de7ef549cdc -size 102839710 diff --git a/resnet50/models/pytorch_model.svg b/resnet50/models/pytorch_model.svg deleted file mode 100644 index 6f10c352c6533d952fc9106b59a27c3896e7528f..0000000000000000000000000000000000000000 --- a/resnet50/models/pytorch_model.svg +++ /dev/null @@ -1 +0,0 @@ -Sequential_modules:Sequential0_modules:Conv2d0.0float32[64,3,7,7]weight〈64×3×7×7〉BatchNorm2d0.1float32[64]weight〈64〉float32[64]bias〈64〉float32[64]running_mean〈64〉float32[64]running_var〈64〉int64num_batches_tracked = 3630ReLU0.2MaxPool2d0.3Sequential0.4_modules:Bottleneck0.4.0_modules:Conv2d0.4.0.conv1float32[64,64,1,1]weight〈64×64×1×1〉BatchNorm2d0.4.0.bn1float32[64]weight〈64〉float32[64]bias〈64〉float32[64]running_mean〈64〉float32[64]running_var〈64〉int64num_batches_tracked = 3630Conv2d0.4.0.conv2float32[64,64,3,3]weight〈64×64×3×3〉BatchNorm2d0.4.0.bn2float32[64]weight〈64〉float32[64]bias〈64〉float32[64]running_mean〈64〉float32[64]running_var〈64〉int64num_batches_tracked = 3630Conv2d0.4.0.conv3float32[256,64,1,1]weight〈256×64×1×1〉BatchNorm2d0.4.0.bn3float32[256]weight〈256〉float32[256]bias〈256〉float32[256]running_mean〈256〉float32[256]running_var〈256〉int64num_batches_tracked = 3630ReLU0.4.0.reluSequential0.4.0.downsample_modules:Conv2d0.4.0.downsample.0float32[256,64,1,1]weight〈256×64×1×1〉BatchNorm2d0.4.0.downsample.1float32[256]weight〈256〉float32[256]bias〈256〉float32[256]running_mean〈256〉float32[256]running_var〈256〉int64num_batches_tracked = 3630Bottleneck0.4.1_modules:Conv2d0.4.1.conv1float32[64,256,1,1]weight〈64×256×1×1〉BatchNorm2d0.4.1.bn1float32[64]weight〈64〉float32[64]bias〈64〉float32[64]running_mean〈64〉float32[64]running_var〈64〉int64num_batches_tracked = 3630Conv2d0.4.1.conv2float32[64,64,3,3]weight〈64×64×3×3〉BatchNorm2d0.4.1.bn2float32[64]weight〈64〉float32[64]bias〈64〉float32[64]running_mean〈64〉float32[64]running_var〈64〉int64num_batches_tracked = 3630Conv2d0.4.1.conv3float32[256,64,1,1]weight〈256×64×1×1〉BatchNorm2d0.4.1.bn3float32[256]weight〈256〉float32[256]bias〈256〉float32[256]running_mean〈256〉float32[256]running_var〈256〉int64num_batches_tracked = 3630ReLU0.4.1.reluBottleneck0.4.2_modules:Conv2d0.4.2.conv1float32[64,256,1,1]weight〈64×256×1×1〉BatchNorm2d0.4.2.bn1float32[64]weight〈64〉float32[64]bias〈64〉float32[64]running_mean〈64〉float32[64]running_var〈64〉int64num_batches_tracked = 3630Conv2d0.4.2.conv2float32[64,64,3,3]weight〈64×64×3×3〉BatchNorm2d0.4.2.bn2float32[64]weight〈64〉float32[64]bias〈64〉float32[64]running_mean〈64〉float32[64]running_var〈64〉int64num_batches_tracked = 3630Conv2d0.4.2.conv3float32[256,64,1,1]weight〈256×64×1×1〉BatchNorm2d0.4.2.bn3float32[256]weight〈256〉float32[256]bias〈256〉float32[256]running_mean〈256〉float32[256]running_var〈256〉int64num_batches_tracked = 3630ReLU0.4.2.reluSequential0.5_modules:Bottleneck0.5.0_modules:Conv2d0.5.0.conv1float32[128,256,1,1]weight〈128×256×1×1〉BatchNorm2d0.5.0.bn1float32[128]weight〈128〉float32[128]bias〈128〉float32[128]running_mean〈128〉float32[128]running_var〈128〉int64num_batches_tracked = 3630Conv2d0.5.0.conv2float32[128,128,3,3]weight〈128×128×3×3〉BatchNorm2d0.5.0.bn2float32[128]weight〈128〉float32[128]bias〈128〉float32[128]running_mean〈128〉float32[128]running_var〈128〉int64num_batches_tracked = 3630Conv2d0.5.0.conv3float32[512,128,1,1]weight〈512×128×1×1〉BatchNorm2d0.5.0.bn3float32[512]weight〈512〉float32[512]bias〈512〉float32[512]running_mean〈512〉float32[512]running_var〈512〉int64num_batches_tracked = 3630ReLU0.5.0.reluSequential0.5.0.downsample_modules:Conv2d0.5.0.downsample.0float32[512,256,1,1]weight〈512×256×1×1〉BatchNorm2d0.5.0.downsample.1float32[512]weight〈512〉float32[512]bias〈512〉float32[512]running_mean〈512〉float32[512]running_var〈512〉int64num_batches_tracked = 3630Bottleneck0.5.1_modules:Conv2d0.5.1.conv1float32[128,512,1,1]weight〈128×512×1×1〉BatchNorm2d0.5.1.bn1float32[128]weight〈128〉float32[128]bias〈128〉float32[128]running_mean〈128〉float32[128]running_var〈128〉int64num_batches_tracked = 3630Conv2d0.5.1.conv2float32[128,128,3,3]weight〈128×128×3×3〉BatchNorm2d0.5.1.bn2float32[128]weight〈128〉float32[128]bias〈128〉float32[128]running_mean〈128〉float32[128]running_var〈128〉int64num_batches_tracked = 3630Conv2d0.5.1.conv3float32[512,128,1,1]weight〈512×128×1×1〉BatchNorm2d0.5.1.bn3float32[512]weight〈512〉float32[512]bias〈512〉float32[512]running_mean〈512〉float32[512]running_var〈512〉int64num_batches_tracked = 3630ReLU0.5.1.reluBottleneck0.5.2_modules:Conv2d0.5.2.conv1float32[128,512,1,1]weight〈128×512×1×1〉BatchNorm2d0.5.2.bn1float32[128]weight〈128〉float32[128]bias〈128〉float32[128]running_mean〈128〉float32[128]running_var〈128〉int64num_batches_tracked = 3630Conv2d0.5.2.conv2float32[128,128,3,3]weight〈128×128×3×3〉BatchNorm2d0.5.2.bn2float32[128]weight〈128〉float32[128]bias〈128〉float32[128]running_mean〈128〉float32[128]running_var〈128〉int64num_batches_tracked = 3630Conv2d0.5.2.conv3float32[512,128,1,1]weight〈512×128×1×1〉BatchNorm2d0.5.2.bn3float32[512]weight〈512〉float32[512]bias〈512〉float32[512]running_mean〈512〉float32[512]running_var〈512〉int64num_batches_tracked = 3630ReLU0.5.2.reluBottleneck0.5.3_modules:Conv2d0.5.3.conv1float32[128,512,1,1]weight〈128×512×1×1〉BatchNorm2d0.5.3.bn1float32[128]weight〈128〉float32[128]bias〈128〉float32[128]running_mean〈128〉float32[128]running_var〈128〉int64num_batches_tracked = 3630Conv2d0.5.3.conv2float32[128,128,3,3]weight〈128×128×3×3〉BatchNorm2d0.5.3.bn2float32[128]weight〈128〉float32[128]bias〈128〉float32[128]running_mean〈128〉float32[128]running_var〈128〉int64num_batches_tracked = 3630Conv2d0.5.3.conv3float32[512,128,1,1]weight〈512×128×1×1〉BatchNorm2d0.5.3.bn3float32[512]weight〈512〉float32[512]bias〈512〉float32[512]running_mean〈512〉float32[512]running_var〈512〉int64num_batches_tracked = 3630ReLU0.5.3.reluSequential0.6_modules:Bottleneck0.6.0_modules:Conv2d0.6.0.conv1float32[256,512,1,1]weight〈256×512×1×1〉BatchNorm2d0.6.0.bn1float32[256]weight〈256〉float32[256]bias〈256〉float32[256]running_mean〈256〉float32[256]running_var〈256〉int64num_batches_tracked = 3630Conv2d0.6.0.conv2float32[256,256,3,3]weight〈256×256×3×3〉BatchNorm2d0.6.0.bn2float32[256]weight〈256〉float32[256]bias〈256〉float32[256]running_mean〈256〉float32[256]running_var〈256〉int64num_batches_tracked = 3630Conv2d0.6.0.conv3float32[1024,256,1,1]weight〈1024×256×1×1〉BatchNorm2d0.6.0.bn3float32[1024]weight〈1024〉float32[1024]bias〈1024〉float32[1024]running_mean〈1024〉float32[1024]running_var〈1024〉int64num_batches_tracked = 3630ReLU0.6.0.reluSequential0.6.0.downsample_modules:Conv2d0.6.0.downsample.0float32[1024,512,1,1]weight〈1024×512×1×1〉BatchNorm2d0.6.0.downsample.1float32[1024]weight〈1024〉float32[1024]bias〈1024〉float32[1024]running_mean〈1024〉float32[1024]running_var〈1024〉int64num_batches_tracked = 3630Bottleneck0.6.1_modules:Conv2d0.6.1.conv1float32[256,1024,1,1]weight〈256×1024×1×1〉BatchNorm2d0.6.1.bn1float32[256]weight〈256〉float32[256]bias〈256〉float32[256]running_mean〈256〉float32[256]running_var〈256〉int64num_batches_tracked = 3630Conv2d0.6.1.conv2float32[256,256,3,3]weight〈256×256×3×3〉BatchNorm2d0.6.1.bn2float32[256]weight〈256〉float32[256]bias〈256〉float32[256]running_mean〈256〉float32[256]running_var〈256〉int64num_batches_tracked = 3630Conv2d0.6.1.conv3float32[1024,256,1,1]weight〈1024×256×1×1〉BatchNorm2d0.6.1.bn3float32[1024]weight〈1024〉float32[1024]bias〈1024〉float32[1024]running_mean〈1024〉float32[1024]running_var〈1024〉int64num_batches_tracked = 3630ReLU0.6.1.reluBottleneck0.6.2_modules:Conv2d0.6.2.conv1float32[256,1024,1,1]weight〈256×1024×1×1〉BatchNorm2d0.6.2.bn1float32[256]weight〈256〉float32[256]bias〈256〉float32[256]running_mean〈256〉float32[256]running_var〈256〉int64num_batches_tracked = 3630Conv2d0.6.2.conv2float32[256,256,3,3]weight〈256×256×3×3〉BatchNorm2d0.6.2.bn2float32[256]weight〈256〉float32[256]bias〈256〉float32[256]running_mean〈256〉float32[256]running_var〈256〉int64num_batches_tracked = 3630Conv2d0.6.2.conv3float32[1024,256,1,1]weight〈1024×256×1×1〉BatchNorm2d0.6.2.bn3float32[1024]weight〈1024〉float32[1024]bias〈1024〉float32[1024]running_mean〈1024〉float32[1024]running_var〈1024〉int64num_batches_tracked = 3630ReLU0.6.2.reluBottleneck0.6.3_modules:Conv2d0.6.3.conv1float32[256,1024,1,1]weight〈256×1024×1×1〉BatchNorm2d0.6.3.bn1float32[256]weight〈256〉float32[256]bias〈256〉float32[256]running_mean〈256〉float32[256]running_var〈256〉int64num_batches_tracked = 3630Conv2d0.6.3.conv2float32[256,256,3,3]weight〈256×256×3×3〉BatchNorm2d0.6.3.bn2float32[256]weight〈256〉float32[256]bias〈256〉float32[256]running_mean〈256〉float32[256]running_var〈256〉int64num_batches_tracked = 3630Conv2d0.6.3.conv3float32[1024,256,1,1]weight〈1024×256×1×1〉BatchNorm2d0.6.3.bn3float32[1024]weight〈1024〉float32[1024]bias〈1024〉float32[1024]running_mean〈1024〉float32[1024]running_var〈1024〉int64num_batches_tracked = 3630ReLU0.6.3.reluBottleneck0.6.4_modules:Conv2d0.6.4.conv1float32[256,1024,1,1]weight〈256×1024×1×1〉BatchNorm2d0.6.4.bn1float32[256]weight〈256〉float32[256]bias〈256〉float32[256]running_mean〈256〉float32[256]running_var〈256〉int64num_batches_tracked = 3630Conv2d0.6.4.conv2float32[256,256,3,3]weight〈256×256×3×3〉BatchNorm2d0.6.4.bn2float32[256]weight〈256〉float32[256]bias〈256〉float32[256]running_mean〈256〉float32[256]running_var〈256〉int64num_batches_tracked = 3630Conv2d0.6.4.conv3float32[1024,256,1,1]weight〈1024×256×1×1〉BatchNorm2d0.6.4.bn3float32[1024]weight〈1024〉float32[1024]bias〈1024〉float32[1024]running_mean〈1024〉float32[1024]running_var〈1024〉int64num_batches_tracked = 3630ReLU0.6.4.reluBottleneck0.6.5_modules:Conv2d0.6.5.conv1float32[256,1024,1,1]weight〈256×1024×1×1〉BatchNorm2d0.6.5.bn1float32[256]weight〈256〉float32[256]bias〈256〉float32[256]running_mean〈256〉float32[256]running_var〈256〉int64num_batches_tracked = 3630Conv2d0.6.5.conv2float32[256,256,3,3]weight〈256×256×3×3〉BatchNorm2d0.6.5.bn2float32[256]weight〈256〉float32[256]bias〈256〉float32[256]running_mean〈256〉float32[256]running_var〈256〉int64num_batches_tracked = 3630Conv2d0.6.5.conv3float32[1024,256,1,1]weight〈1024×256×1×1〉BatchNorm2d0.6.5.bn3float32[1024]weight〈1024〉float32[1024]bias〈1024〉float32[1024]running_mean〈1024〉float32[1024]running_var〈1024〉int64num_batches_tracked = 3630ReLU0.6.5.reluSequential0.7_modules:Bottleneck0.7.0_modules:Conv2d0.7.0.conv1float32[512,1024,1,1]weight〈512×1024×1×1〉BatchNorm2d0.7.0.bn1float32[512]weight〈512〉float32[512]bias〈512〉float32[512]running_mean〈512〉float32[512]running_var〈512〉int64num_batches_tracked = 3630Conv2d0.7.0.conv2float32[512,512,3,3]weight〈512×512×3×3〉BatchNorm2d0.7.0.bn2float32[512]weight〈512〉float32[512]bias〈512〉float32[512]running_mean〈512〉float32[512]running_var〈512〉int64num_batches_tracked = 3630Conv2d0.7.0.conv3float32[2048,512,1,1]weight〈2048×512×1×1〉BatchNorm2d0.7.0.bn3float32[2048]weight〈2048〉float32[2048]bias〈2048〉float32[2048]running_mean〈2048〉float32[2048]running_var〈2048〉int64num_batches_tracked = 3630ReLU0.7.0.reluSequential0.7.0.downsample_modules:Conv2d0.7.0.downsample.0float32[2048,1024,1,1]weight〈2048×1024×1×1〉BatchNorm2d0.7.0.downsample.1float32[2048]weight〈2048〉float32[2048]bias〈2048〉float32[2048]running_mean〈2048〉float32[2048]running_var〈2048〉int64num_batches_tracked = 3630Bottleneck0.7.1_modules:Conv2d0.7.1.conv1float32[512,2048,1,1]weight〈512×2048×1×1〉BatchNorm2d0.7.1.bn1float32[512]weight〈512〉float32[512]bias〈512〉float32[512]running_mean〈512〉float32[512]running_var〈512〉int64num_batches_tracked = 3630Conv2d0.7.1.conv2float32[512,512,3,3]weight〈512×512×3×3〉BatchNorm2d0.7.1.bn2float32[512]weight〈512〉float32[512]bias〈512〉float32[512]running_mean〈512〉float32[512]running_var〈512〉int64num_batches_tracked = 3630Conv2d0.7.1.conv3float32[2048,512,1,1]weight〈2048×512×1×1〉BatchNorm2d0.7.1.bn3float32[2048]weight〈2048〉float32[2048]bias〈2048〉float32[2048]running_mean〈2048〉float32[2048]running_var〈2048〉int64num_batches_tracked = 3630ReLU0.7.1.reluBottleneck0.7.2_modules:Conv2d0.7.2.conv1float32[512,2048,1,1]weight〈512×2048×1×1〉BatchNorm2d0.7.2.bn1float32[512]weight〈512〉float32[512]bias〈512〉float32[512]running_mean〈512〉float32[512]running_var〈512〉int64num_batches_tracked = 3630Conv2d0.7.2.conv2float32[512,512,3,3]weight〈512×512×3×3〉BatchNorm2d0.7.2.bn2float32[512]weight〈512〉float32[512]bias〈512〉float32[512]running_mean〈512〉float32[512]running_var〈512〉int64num_batches_tracked = 3630Conv2d0.7.2.conv3float32[2048,512,1,1]weight〈2048×512×1×1〉BatchNorm2d0.7.2.bn3float32[2048]weight〈2048〉float32[2048]bias〈2048〉float32[2048]running_mean〈2048〉float32[2048]running_var〈2048〉int64num_batches_tracked = 3630ReLU0.7.2.reluSequential1_modules:AdaptiveC…catPool2d1.0_modules:AdaptiveAvgPool2d1.0.apAdaptiveMaxPool2d1.0.mpFlatten1.1BatchNorm1d1.2float32[4096]weight〈4096〉float32[4096]bias〈4096〉float32[4096]running_mean〈4096〉float32[4096]running_var〈4096〉int64num_batches_tracked = 3630Dropout1.3Linear1.4float32[512,4096]weight〈512×4096〉float32[512]bias〈512〉ReLU1.5BatchNorm1d1.6float32[512]weight〈512〉float32[512]bias〈512〉float32[512]running_mean〈512〉float32[512]running_var〈512〉int64num_batches_tracked = 3630Dropout1.7Linear1.8float32[2,512]weight〈2×512〉float32[2]bias〈2〉 \ No newline at end of file diff --git a/resnet50/resnet50/shapes.json b/resnet50/resnet50/shapes.json deleted file mode 100644 index ab6a2094830380f0af415a7ddd579cfde8345099..0000000000000000000000000000000000000000 --- a/resnet50/resnet50/shapes.json +++ /dev/null @@ -1 +0,0 @@ -[[[1, 3, 224, 224], [1, 512, 28, 28]], [[1, 512, 28, 28], [1, 512, 28, 28]], [[1, 512, 28, 28], [1, 1024, 14, 14]], [[1, 1024, 14, 14], [1, 1024, 14, 14]], [[1, 1024, 14, 14], [1, 1024, 14, 14]], [[1, 1024, 14, 14], [1, 1024, 14, 14]], [[1, 1024, 14, 14], [1, 1024, 14, 14]], [[1, 1024, 14, 14], [1, 1024, 14, 14]], [[1, 1024, 14, 14], [1, 2048, 7, 7]], [[1, 2048, 7, 7], [1, 2048, 7, 7]], [[1, 2048, 7, 7], [1, 2048, 7, 7]], [[1, 2048, 7, 7], [1, 2048]], [[1, 2048], [1, 1000]]] \ No newline at end of file diff --git a/resnet50/shapes.json b/resnet50/shapes.json deleted file mode 100644 index dd641df2edca2ffc94296d1927b95adc16acf21e..0000000000000000000000000000000000000000 --- a/resnet50/shapes.json +++ /dev/null @@ -1 +0,0 @@ -[[[1, 3, 224, 224], [1, 64, 56, 56]], [[1, 64, 56, 56], [1, 1000]]] \ No newline at end of file diff --git a/resnet50/split_2parts.ipynb b/resnet50/split_2parts.ipynb deleted file mode 100644 index d90baa3ed386304c64c3fecc4c3c862f03144328..0000000000000000000000000000000000000000 --- a/resnet50/split_2parts.ipynb +++ /dev/null @@ -1,851 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "id": "5ab0b676821097a2", - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-08T08:19:10.525885Z", - "start_time": "2024-11-08T08:19:10.380880Z" - } - }, - "source": [ - "import torch\n", - "from main_torch import read_paths_images, load_images, transform, inference, inference_two_models\n", - "# Download resnet18 model\n", - "from torchvision import models\n", - "\n", - "model = torch.load('models/pytorch_model.pth')\n", - "\n", - "x = torch.randn(2, 3, 224, 224)\n", - "model.eval()\n", - "model(x).argmax().item()\n" - ], - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_204360/158561413.py:6: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n", - " model = torch.load('models/pytorch_model.pth')\n" - ] - }, - { - "data": { - "text/plain": [ - "0" - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - } - ], - "execution_count": 34 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-08T08:19:10.543705Z", - "start_time": "2024-11-08T08:19:10.538848Z" - } - }, - "cell_type": "code", - "source": "model", - "id": "70ef128c91d4c640", - "outputs": [ - { - "data": { - "text/plain": [ - "Sequential(\n", - " (0): Sequential(\n", - " (0): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n", - " (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU(inplace=True)\n", - " (3): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)\n", - " (4): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " (5): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (3): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " (6): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(512, 1024, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (3): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (4): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (5): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " (7): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(1024, 2048, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " )\n", - " (1): Sequential(\n", - " (0): AdaptiveConcatPool2d(\n", - " (ap): AdaptiveAvgPool2d(output_size=1)\n", - " (mp): AdaptiveMaxPool2d(output_size=1)\n", - " )\n", - " (1): fastai.layers.Flatten(full=False)\n", - " (2): BatchNorm1d(4096, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (3): Dropout(p=0.25, inplace=False)\n", - " (4): Linear(in_features=4096, out_features=512, bias=True)\n", - " (5): ReLU(inplace=True)\n", - " (6): BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (7): Dropout(p=0.5, inplace=False)\n", - " (8): Linear(in_features=512, out_features=2, bias=True)\n", - " )\n", - ")" - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], - "execution_count": 35 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-08T08:19:10.597771Z", - "start_time": "2024-11-08T08:19:10.594240Z" - } - }, - "cell_type": "code", - "source": [ - "children = list(model.children())\n", - "\n", - "all_grand_children = []\n", - "for i, child in enumerate(children):\n", - " grand_children = list(child.children())\n", - " for j, grand_child in enumerate(grand_children):\n", - " print(i, j, grand_child)\n", - " all_grand_children.extend(grand_children)\n", - "new_model = torch.nn.Sequential(*all_grand_children) \n" - ], - "id": "f1a0c135ed5bc117", - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0 0 Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n", - "0 1 BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - "0 2 ReLU(inplace=True)\n", - "0 3 MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)\n", - "0 4 Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - ")\n", - "0 5 Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (3): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - ")\n", - "0 6 Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(512, 1024, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (3): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (4): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (5): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - ")\n", - "0 7 Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(1024, 2048, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - ")\n", - "1 0 AdaptiveConcatPool2d(\n", - " (ap): AdaptiveAvgPool2d(output_size=1)\n", - " (mp): AdaptiveMaxPool2d(output_size=1)\n", - ")\n", - "1 1 fastai.layers.Flatten(full=False)\n", - "1 2 BatchNorm1d(4096, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - "1 3 Dropout(p=0.25, inplace=False)\n", - "1 4 Linear(in_features=4096, out_features=512, bias=True)\n", - "1 5 ReLU(inplace=True)\n", - "1 6 BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - "1 7 Dropout(p=0.5, inplace=False)\n", - "1 8 Linear(in_features=512, out_features=2, bias=True)\n" - ] - } - ], - "execution_count": 36 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-08T08:19:10.651969Z", - "start_time": "2024-11-08T08:19:10.647904Z" - } - }, - "cell_type": "code", - "source": "new_model", - "id": "4659fbd7aa847e4a", - "outputs": [ - { - "data": { - "text/plain": [ - "Sequential(\n", - " (0): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n", - " (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU(inplace=True)\n", - " (3): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)\n", - " (4): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " (5): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (3): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " (6): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(512, 1024, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (3): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (4): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (5): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " (7): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(1024, 2048, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " (8): AdaptiveConcatPool2d(\n", - " (ap): AdaptiveAvgPool2d(output_size=1)\n", - " (mp): AdaptiveMaxPool2d(output_size=1)\n", - " )\n", - " (9): fastai.layers.Flatten(full=False)\n", - " (10): BatchNorm1d(4096, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (11): Dropout(p=0.25, inplace=False)\n", - " (12): Linear(in_features=4096, out_features=512, bias=True)\n", - " (13): ReLU(inplace=True)\n", - " (14): BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (15): Dropout(p=0.5, inplace=False)\n", - " (16): Linear(in_features=512, out_features=2, bias=True)\n", - ")" - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" - } - ], - "execution_count": 37 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-08T08:19:10.906176Z", - "start_time": "2024-11-08T08:19:10.824348Z" - } - }, - "cell_type": "code", - "source": "new_model(x).argmax().item()", - "id": "68d385d68a790b99", - "outputs": [ - { - "data": { - "text/plain": [ - "0" - ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" - } - ], - "execution_count": 38 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-08T08:19:10.993766Z", - "start_time": "2024-11-08T08:19:10.991662Z" - } - }, - "cell_type": "code", - "source": "# Join sequential layers\n", - "id": "2cded0de3af108dc", - "outputs": [], - "execution_count": 39 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-08T08:19:11.089266Z", - "start_time": "2024-11-08T08:19:11.040001Z" - } - }, - "cell_type": "code", - "source": [ - "class Part(torch.nn.Module):\n", - " def __init__(self, children):\n", - " super(Part, self).__init__()\n", - " \n", - " self.features = torch.nn.Sequential(\n", - " *children\n", - " )\n", - " \n", - " def forward(self, x):\n", - " return self.features(x)\n", - " \n", - "children = list(model.children())\n", - "part1 = Part(children[:5])\n", - "part2 = Part(children[5:])\n", - "input_tensor = torch.randn(1, 3, 224, 224)\n", - "\n", - "# Run the input through the first part\n", - "x = part1(input_tensor)\n", - "output = part2(x)\n", - "print(output.argmax().item())\n" - ], - "id": "a591e52fd2f5dcdf", - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0\n" - ] - } - ], - "execution_count": 40 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-08T08:19:11.275610Z", - "start_time": "2024-11-08T08:19:11.155739Z" - } - }, - "cell_type": "code", - "source": [ - "DATASET_NAME = \"../../datasets/10kds\"\n", - "DATASET_SIZE = 1\n", - "BATCH_SIZE = 1\n", - "directory_path = f\"{DATASET_NAME}/\"\n", - "paths = read_paths_images(directory_path, DATASET_SIZE)\n", - "batches = [paths[i:i + BATCH_SIZE] for i in range(0, len(paths), BATCH_SIZE)]\n", - "\n", - "for i, batch in enumerate(batches):\n", - " images_data = load_images(batch)\n", - " normalized_batch = transform(images_data)\n", - " result_batch = inference(model, normalized_batch)\n", - " for url, result in zip(batch, result_batch):\n", - " print(f'{url} {result}')\n", - " result_batch = inference_two_models(part1, part2, normalized_batch)\n", - " for url, result in zip(batch, result_batch):\n", - " print(f'{url} {result}')\n", - " \n", - " \n", - " " - ], - "id": "7085e32a8e9bdc00", - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "../../datasets/10kds/b5391b2ee1de4a42b58612e48bc4ec67 {'prob': 0.00038267861236818135, 'label': 'on'}\n", - "../../datasets/10kds/b5391b2ee1de4a42b58612e48bc4ec67 {'prob': 0.00038267861236818135, 'label': 'on'}\n" - ] - } - ], - "execution_count": 41 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-08T08:19:11.355178Z", - "start_time": "2024-11-08T08:19:11.353197Z" - } - }, - "cell_type": "code", - "source": "", - "id": "371070228c789a3c", - "outputs": [], - "execution_count": null - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-08T08:19:11.401573Z", - "start_time": "2024-11-08T08:19:11.399533Z" - } - }, - "cell_type": "code", - "source": "", - "id": "642dccb3c27dd374", - "outputs": [], - "execution_count": null - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 2 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.6" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/resnet50/split_3parts.ipynb b/resnet50/split_3parts.ipynb deleted file mode 100644 index c9e3c4d369a7885eaacd31d7aa546da6a4470119..0000000000000000000000000000000000000000 --- a/resnet50/split_3parts.ipynb +++ /dev/null @@ -1,1265 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "id": "5ab0b676821097a2", - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-08T09:33:17.869374Z", - "start_time": "2024-11-08T09:33:17.714482Z" - } - }, - "source": [ - "import torch\n", - "from main_torch import read_paths_images, load_images, transform, inference, inference_three_models\n", - "# Download resnet18 model\n", - "from torchvision import models\n", - "\n", - "model = torch.load('models/pytorch_model.pth')\n", - "\n", - "x = torch.randn(2, 3, 224, 224)\n", - "model.eval()\n", - "model(x).argmax().item()\n" - ], - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_212208/674673921.py:6: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n", - " model = torch.load('models/pytorch_model.pth')\n" - ] - }, - { - "data": { - "text/plain": [ - "2" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "execution_count": 11 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-08T09:33:18.836073Z", - "start_time": "2024-11-08T09:33:18.831261Z" - } - }, - "cell_type": "code", - "source": "model", - "id": "70ef128c91d4c640", - "outputs": [ - { - "data": { - "text/plain": [ - "Sequential(\n", - " (0): Sequential(\n", - " (0): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n", - " (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU(inplace=True)\n", - " (3): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)\n", - " (4): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " (5): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (3): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " (6): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(512, 1024, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (3): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (4): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (5): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " (7): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(1024, 2048, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " )\n", - " (1): Sequential(\n", - " (0): AdaptiveConcatPool2d(\n", - " (ap): AdaptiveAvgPool2d(output_size=1)\n", - " (mp): AdaptiveMaxPool2d(output_size=1)\n", - " )\n", - " (1): fastai.layers.Flatten(full=False)\n", - " (2): BatchNorm1d(4096, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (3): Dropout(p=0.25, inplace=False)\n", - " (4): Linear(in_features=4096, out_features=512, bias=True)\n", - " (5): ReLU(inplace=True)\n", - " (6): BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (7): Dropout(p=0.5, inplace=False)\n", - " (8): Linear(in_features=512, out_features=2, bias=True)\n", - " )\n", - ")" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "execution_count": 12 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-08T09:33:19.985712Z", - "start_time": "2024-11-08T09:33:19.980528Z" - } - }, - "cell_type": "code", - "source": [ - "def join_sequentials(children):\n", - " all_grand_children = []\n", - " for i, child in enumerate(children):\n", - " if isinstance(child, torch.nn.Sequential):\n", - " grand_children = list(child.children())\n", - " all_grand_children.extend(grand_children)\n", - " else:\n", - " all_grand_children.append(child)\n", - " return all_grand_children\n", - "\n", - "children = list(model.children())\n", - "all_grand_children = join_sequentials(children)\n", - "new_model = torch.nn.Sequential(*all_grand_children) \n", - "print(new_model)\n", - "\n", - "children = list(new_model.children())\n", - "all_grand_children = join_sequentials(children)\n", - "new_model = torch.nn.Sequential(*all_grand_children) \n", - "print(new_model)" - ], - "id": "f1a0c135ed5bc117", - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Sequential(\n", - " (0): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n", - " (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU(inplace=True)\n", - " (3): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)\n", - " (4): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " (5): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (3): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " (6): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(512, 1024, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (3): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (4): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (5): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " (7): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(1024, 2048, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " (8): AdaptiveConcatPool2d(\n", - " (ap): AdaptiveAvgPool2d(output_size=1)\n", - " (mp): AdaptiveMaxPool2d(output_size=1)\n", - " )\n", - " (9): fastai.layers.Flatten(full=False)\n", - " (10): BatchNorm1d(4096, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (11): Dropout(p=0.25, inplace=False)\n", - " (12): Linear(in_features=4096, out_features=512, bias=True)\n", - " (13): ReLU(inplace=True)\n", - " (14): BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (15): Dropout(p=0.5, inplace=False)\n", - " (16): Linear(in_features=512, out_features=2, bias=True)\n", - ")\n", - "Sequential(\n", - " (0): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n", - " (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU(inplace=True)\n", - " (3): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)\n", - " (4): Bottleneck(\n", - " (conv1): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (5): Bottleneck(\n", - " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (6): Bottleneck(\n", - " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (7): Bottleneck(\n", - " (conv1): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (8): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (9): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (10): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (11): Bottleneck(\n", - " (conv1): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(512, 1024, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (12): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (13): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (14): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (15): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (16): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (17): Bottleneck(\n", - " (conv1): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(1024, 2048, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (18): Bottleneck(\n", - " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (19): Bottleneck(\n", - " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (20): AdaptiveConcatPool2d(\n", - " (ap): AdaptiveAvgPool2d(output_size=1)\n", - " (mp): AdaptiveMaxPool2d(output_size=1)\n", - " )\n", - " (21): fastai.layers.Flatten(full=False)\n", - " (22): BatchNorm1d(4096, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (23): Dropout(p=0.25, inplace=False)\n", - " (24): Linear(in_features=4096, out_features=512, bias=True)\n", - " (25): ReLU(inplace=True)\n", - " (26): BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (27): Dropout(p=0.5, inplace=False)\n", - " (28): Linear(in_features=512, out_features=2, bias=True)\n", - ")\n" - ] - } - ], - "execution_count": 13 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-08T09:33:20.632375Z", - "start_time": "2024-11-08T09:33:20.628770Z" - } - }, - "cell_type": "code", - "source": [ - "children = list(new_model.children())\n", - "flatten_layer = children[21]\n", - "print(flatten_layer)\n", - "children[21] = torch.nn.Flatten()\n", - "new_model = torch.nn.Sequential(*children)\n", - "print(new_model)" - ], - "id": "4659fbd7aa847e4a", - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "fastai.layers.Flatten(full=False)\n", - "Sequential(\n", - " (0): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n", - " (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU(inplace=True)\n", - " (3): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)\n", - " (4): Bottleneck(\n", - " (conv1): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (5): Bottleneck(\n", - " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (6): Bottleneck(\n", - " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (7): Bottleneck(\n", - " (conv1): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (8): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (9): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (10): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (11): Bottleneck(\n", - " (conv1): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(512, 1024, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (12): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (13): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (14): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (15): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (16): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (17): Bottleneck(\n", - " (conv1): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(1024, 2048, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (18): Bottleneck(\n", - " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (19): Bottleneck(\n", - " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (20): AdaptiveConcatPool2d(\n", - " (ap): AdaptiveAvgPool2d(output_size=1)\n", - " (mp): AdaptiveMaxPool2d(output_size=1)\n", - " )\n", - " (21): Flatten(start_dim=1, end_dim=-1)\n", - " (22): BatchNorm1d(4096, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (23): Dropout(p=0.25, inplace=False)\n", - " (24): Linear(in_features=4096, out_features=512, bias=True)\n", - " (25): ReLU(inplace=True)\n", - " (26): BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (27): Dropout(p=0.5, inplace=False)\n", - " (28): Linear(in_features=512, out_features=2, bias=True)\n", - ")\n" - ] - } - ], - "execution_count": 14 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-08T09:33:21.581208Z", - "start_time": "2024-11-08T09:33:21.491793Z" - } - }, - "cell_type": "code", - "source": "new_model(x).argmax().item()", - "id": "68d385d68a790b99", - "outputs": [ - { - "data": { - "text/plain": [ - "2" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "execution_count": 15 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-08T09:33:24.802948Z", - "start_time": "2024-11-08T09:33:24.716089Z" - } - }, - "cell_type": "code", - "source": [ - "\n", - "class Part(torch.nn.Module):\n", - " def __init__(self, children):\n", - " super(Part, self).__init__()\n", - " \n", - " self.features = torch.nn.Sequential(\n", - " *children\n", - " )\n", - " \n", - " def forward(self, x):\n", - " return self.features(x)\n", - "\n", - "children = list(model.children())\n", - "part1 = Part(children[:1])\n", - "print(part1)\n", - "part2 = Part(children[1:15])\n", - "print(part2)\n", - "part3 = Part(children[15:])\n", - "print(part3)\n", - "input_tensor = torch.randn(2, 3, 224, 224)\n", - "\n", - "x = part1(input_tensor)\n", - "x = part2(x)\n", - "output = part3(x)\n", - "print(output.argmax().item())\n" - ], - "id": "a591e52fd2f5dcdf", - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Part(\n", - " (features): Sequential(\n", - " (0): Sequential(\n", - " (0): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n", - " (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU(inplace=True)\n", - " (3): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)\n", - " (4): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " (5): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (3): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " (6): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(512, 1024, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (3): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (4): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (5): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " (7): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(1024, 2048, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " )\n", - " )\n", - ")\n", - "Part(\n", - " (features): Sequential(\n", - " (0): Sequential(\n", - " (0): AdaptiveConcatPool2d(\n", - " (ap): AdaptiveAvgPool2d(output_size=1)\n", - " (mp): AdaptiveMaxPool2d(output_size=1)\n", - " )\n", - " (1): fastai.layers.Flatten(full=False)\n", - " (2): BatchNorm1d(4096, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (3): Dropout(p=0.25, inplace=False)\n", - " (4): Linear(in_features=4096, out_features=512, bias=True)\n", - " (5): ReLU(inplace=True)\n", - " (6): BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (7): Dropout(p=0.5, inplace=False)\n", - " (8): Linear(in_features=512, out_features=2, bias=True)\n", - " )\n", - " )\n", - ")\n", - "Part(\n", - " (features): Sequential()\n", - ")\n", - "0\n" - ] - } - ], - "execution_count": 16 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-08T09:33:25.518540Z", - "start_time": "2024-11-08T09:33:25.398568Z" - } - }, - "cell_type": "code", - "source": [ - "DATASET_NAME = \"../../datasets/10kds\"\n", - "DATASET_SIZE = 1\n", - "BATCH_SIZE = 1\n", - "directory_path = f\"{DATASET_NAME}/\"\n", - "paths = read_paths_images(directory_path, DATASET_SIZE)\n", - "batches = [paths[i:i + BATCH_SIZE] for i in range(0, len(paths), BATCH_SIZE)]\n", - "\n", - "for i, batch in enumerate(batches):\n", - " images_data = load_images(batch)\n", - " normalized_batch = transform(images_data)\n", - " result_batch = inference(model, normalized_batch)\n", - " for url, result in zip(batch, result_batch):\n", - " print(f'{url} {result}')\n", - " result_batch = inference_three_models(part1, part2, part3, normalized_batch)\n", - " for url, result in zip(batch, result_batch):\n", - " print(f'{url} {result}')\n", - " \n", - " \n", - " " - ], - "id": "7085e32a8e9bdc00", - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "../../datasets/10kds/b5391b2ee1de4a42b58612e48bc4ec67 {'prob': 0.00038267861236818135, 'label': 'on'}\n", - "../../datasets/10kds/b5391b2ee1de4a42b58612e48bc4ec67 {'prob': 0.00038267861236818135, 'label': 'on'}\n" - ] - } - ], - "execution_count": 17 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-08T08:22:38.662291Z", - "start_time": "2024-11-08T08:22:38.417203Z" - } - }, - "cell_type": "code", - "source": [ - "# Save each model\n", - "torch.save(part1, 'models/part1.pth')\n", - "torch.save(part2, 'models/part2.pth')\n", - "torch.save(part3, 'models/part3.pth')" - ], - "id": "371070228c789a3c", - "outputs": [], - "execution_count": 8 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-08T08:22:38.716594Z", - "start_time": "2024-11-08T08:22:38.673128Z" - } - }, - "cell_type": "code", - "source": [ - "# Load each model\n", - "part1 = torch.load('models/part1.pth')\n", - "part2 = torch.load('models/part2.pth')\n", - "part3 = torch.load('models/part3.pth')" - ], - "id": "3cb4b441871fdf7c", - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_206908/4244960238.py:2: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n", - " part1 = torch.load('models/part1.pth')\n", - "/tmp/ipykernel_206908/4244960238.py:3: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n", - " part2 = torch.load('models/part2.pth')\n", - "/tmp/ipykernel_206908/4244960238.py:4: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n", - " part3 = torch.load('models/part3.pth')\n" - ] - } - ], - "execution_count": 9 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-08T08:22:38.729385Z", - "start_time": "2024-11-08T08:22:38.728004Z" - } - }, - "cell_type": "code", - "source": "", - "id": "d40a414c7ee8c45", - "outputs": [], - "execution_count": null - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 2 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.6" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/resnet50/split_parts.ipynb b/resnet50/split_parts.ipynb deleted file mode 100644 index 848b092a12b319647208d713a78bb0711052e842..0000000000000000000000000000000000000000 --- a/resnet50/split_parts.ipynb +++ /dev/null @@ -1,933 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "id": "5ab0b676821097a2", - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-18T15:04:30.108949Z", - "start_time": "2024-11-18T15:04:29.506094Z" - } - }, - "source": [ - "import torch\n", - "from main_torch import read_paths_images, load_images, transform, inference, inference_three_models, inference_mult_models\n", - "# Download resnet18 model\n", - "from torchvision import models\n", - "\n", - "model = torch.load('models/pytorch_model.pth')\n", - "\n", - "x = torch.randn(2, 3, 224, 224)\n", - "model.eval()\n", - "\n", - "print(model(x).argmax().item())\n" - ], - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2\n" - ] - } - ], - "execution_count": 12 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-18T15:04:30.193670Z", - "start_time": "2024-11-18T15:04:30.177518Z" - } - }, - "cell_type": "code", - "source": "print(model)", - "id": "aaa1a2950a1e47ef", - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Sequential(\n", - " (0): Sequential(\n", - " (0): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n", - " (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU(inplace=True)\n", - " (3): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)\n", - " (4): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " (5): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (3): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " (6): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(512, 1024, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (3): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (4): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (5): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " (7): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(1024, 2048, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " )\n", - " (1): Sequential(\n", - " (0): AdaptiveConcatPool2d(\n", - " (ap): AdaptiveAvgPool2d(output_size=1)\n", - " (mp): AdaptiveMaxPool2d(output_size=1)\n", - " )\n", - " (1): fastai.layers.Flatten(full=False)\n", - " (2): BatchNorm1d(4096, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (3): Dropout(p=0.25, inplace=False)\n", - " (4): Linear(in_features=4096, out_features=512, bias=True)\n", - " (5): ReLU(inplace=True)\n", - " (6): BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (7): Dropout(p=0.5, inplace=False)\n", - " (8): Linear(in_features=512, out_features=2, bias=True)\n", - " )\n", - ")\n" - ] - } - ], - "execution_count": 13 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-18T15:04:30.576322Z", - "start_time": "2024-11-18T15:04:30.269106Z" - } - }, - "cell_type": "code", - "source": [ - "def join_sequentials(children):\n", - " all_grand_children = []\n", - " for i, child in enumerate(children):\n", - " if isinstance(child, torch.nn.Sequential):\n", - " grand_children = list(child.children())\n", - " all_grand_children.extend(grand_children)\n", - " elif isinstance(child, torch.nn.Linear):\n", - " all_grand_children.append(torch.nn.Flatten())\n", - " all_grand_children.append(child)\n", - " else:\n", - " all_grand_children.append(child)\n", - " return all_grand_children\n", - "\n", - "children = list(model.children())\n", - "all_grand_children = join_sequentials(children)\n", - "new_model = torch.nn.Sequential(*all_grand_children)\n", - "print(new_model(x).argmax().item())" - ], - "id": "f1a0c135ed5bc117", - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2\n" - ] - } - ], - "execution_count": 14 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-18T15:04:30.939029Z", - "start_time": "2024-11-18T15:04:30.645181Z" - } - }, - "cell_type": "code", - "source": [ - "children = list(model.children())\n", - "all_grand_children = join_sequentials(children)\n", - "new_model = torch.nn.Sequential(*all_grand_children)\n", - "print(new_model(x).argmax().item())" - ], - "id": "9852b3a24b050f2a", - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2\n" - ] - } - ], - "execution_count": 15 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-18T15:04:31.023029Z", - "start_time": "2024-11-18T15:04:31.013310Z" - } - }, - "cell_type": "code", - "source": "print(new_model)", - "id": "317f6b61d4fd1395", - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Sequential(\n", - " (0): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n", - " (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU(inplace=True)\n", - " (3): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)\n", - " (4): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " (5): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (3): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " (6): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(512, 1024, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (3): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (4): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (5): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " (7): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(1024, 2048, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " (8): AdaptiveConcatPool2d(\n", - " (ap): AdaptiveAvgPool2d(output_size=1)\n", - " (mp): AdaptiveMaxPool2d(output_size=1)\n", - " )\n", - " (9): fastai.layers.Flatten(full=False)\n", - " (10): BatchNorm1d(4096, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (11): Dropout(p=0.25, inplace=False)\n", - " (12): Linear(in_features=4096, out_features=512, bias=True)\n", - " (13): ReLU(inplace=True)\n", - " (14): BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (15): Dropout(p=0.5, inplace=False)\n", - " (16): Linear(in_features=512, out_features=2, bias=True)\n", - ")\n" - ] - } - ], - "execution_count": 16 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-18T15:04:32.161908Z", - "start_time": "2024-11-18T15:04:31.231657Z" - } - }, - "cell_type": "code", - "source": [ - "children = list(new_model.children())\n", - "all_grand_children = join_sequentials(children)\n", - "new_model = torch.nn.Sequential(*all_grand_children)\n", - "print(new_model(x).argmax().item())" - ], - "id": "8bf4102434178e3e", - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2\n" - ] - } - ], - "execution_count": 17 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-18T15:04:32.253067Z", - "start_time": "2024-11-18T15:04:32.240803Z" - } - }, - "cell_type": "code", - "source": "print(new_model)", - "id": "f752dc802d00da42", - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Sequential(\n", - " (0): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n", - " (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU(inplace=True)\n", - " (3): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)\n", - " (4): Bottleneck(\n", - " (conv1): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (5): Bottleneck(\n", - " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (6): Bottleneck(\n", - " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (7): Bottleneck(\n", - " (conv1): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (8): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (9): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (10): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (11): Bottleneck(\n", - " (conv1): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(512, 1024, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (12): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (13): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (14): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (15): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (16): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (17): Bottleneck(\n", - " (conv1): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(1024, 2048, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (18): Bottleneck(\n", - " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (19): Bottleneck(\n", - " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (20): AdaptiveConcatPool2d(\n", - " (ap): AdaptiveAvgPool2d(output_size=1)\n", - " (mp): AdaptiveMaxPool2d(output_size=1)\n", - " )\n", - " (21): fastai.layers.Flatten(full=False)\n", - " (22): BatchNorm1d(4096, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (23): Dropout(p=0.25, inplace=False)\n", - " (24): Flatten(start_dim=1, end_dim=-1)\n", - " (25): Linear(in_features=4096, out_features=512, bias=True)\n", - " (26): ReLU(inplace=True)\n", - " (27): BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (28): Dropout(p=0.5, inplace=False)\n", - " (29): Flatten(start_dim=1, end_dim=-1)\n", - " (30): Linear(in_features=512, out_features=2, bias=True)\n", - ")\n" - ] - } - ], - "execution_count": 18 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-18T15:04:32.871876Z", - "start_time": "2024-11-18T15:04:32.550588Z" - } - }, - "cell_type": "code", - "source": [ - "class Part(torch.nn.Module):\n", - " def __init__(self, child):\n", - " super(Part, self).__init__()\n", - " self.features = child\n", - " \n", - " def forward(self, x):\n", - " return self.features(x)\n", - "\n", - "children = list(new_model.children())\n", - "parts = []\n", - "names = []\n", - "for child in children:\n", - " names.append(child.__class__.__name__)\n", - " part = Part(child)\n", - " parts.append(part)\n", - "\n", - "x = torch.randn(2, 3, 224, 224)\n", - "\n", - "for part in parts:\n", - " x = part(x)\n", - " \n", - "print(x.argmax().item())\n" - ], - "id": "a591e52fd2f5dcdf", - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2\n" - ] - } - ], - "execution_count": 19 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-18T15:04:33.611228Z", - "start_time": "2024-11-18T15:04:33.038765Z" - } - }, - "cell_type": "code", - "source": [ - "DATASET_NAME = \"../../datasets/10kds\"\n", - "DATASET_SIZE = 1\n", - "BATCH_SIZE = 1\n", - "directory_path = f\"{DATASET_NAME}/\"\n", - "paths = read_paths_images(directory_path, DATASET_SIZE)\n", - "batches = [paths[i:i + BATCH_SIZE] for i in range(0, len(paths), BATCH_SIZE)]\n", - "\n", - "for i, batch in enumerate(batches):\n", - " images_data = load_images(batch)\n", - " normalized_batch = transform(images_data)\n", - "\n", - " result_batch = inference(model, normalized_batch)\n", - " for url, result in zip(batch, result_batch):\n", - " print(f'{url} {result}')\n", - "\n", - " result_batch, times_parts = inference_mult_models(parts, normalized_batch)\n", - " for url, result in zip(batch, result_batch):\n", - " print(f'{url} {result}')\n" - ], - "id": "7085e32a8e9bdc00", - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "../../datasets/10kds/b5391b2ee1de4a42b58612e48bc4ec67 {'prob': 0.0003826784377451986, 'label': 'on'}\n", - "../../datasets/10kds/b5391b2ee1de4a42b58612e48bc4ec67 {'prob': 0.0003826784377451986, 'label': 'on'}\n" - ] - } - ], - "execution_count": 20 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-18T15:04:34.171866Z", - "start_time": "2024-11-18T15:04:33.713037Z" - } - }, - "cell_type": "code", - "source": [ - "# Save each part\n", - "for i, part in enumerate(parts):\n", - " torch.save(part, f'models/parts/{i}.pth')\n" - ], - "id": "e6c7c597945deea2", - "outputs": [], - "execution_count": 21 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-18T15:04:34.441262Z", - "start_time": "2024-11-18T15:04:34.185434Z" - } - }, - "cell_type": "code", - "source": [ - "# Plot times_parts\n", - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "\n", - "# Compute cumulative start positions\n", - "cumulative_times = np.cumsum(times_parts)\n", - "\n", - "# Plotting\n", - "fig, ax = plt.subplots(figsize=(20, 2))\n", - "ax.barh(['Model Execution'], width=times_parts, left=np.insert(cumulative_times[:-1], 0, 0), color=\"skyblue\", edgecolor=\"grey\")\n", - "\n", - "# Add layer labels\n", - "for i, (label, time, start) in enumerate(zip(names, times_parts, np.insert(cumulative_times[:-1], 0, 0))):\n", - " ax.text(start + time / 2, 0, label, ha='center', va='center', rotation=90, fontsize=8)\n", - "\n", - "# Labeling\n", - "ax.set_xlabel(\"Time (seconds)\")\n", - "ax.set_title(\"Cumulative Execution Time per Layer\")\n", - "\n", - "# Adjust layout\n", - "plt.tight_layout()\n", - "plt.show()\n" - ], - "id": "d40a414c7ee8c45", - "outputs": [ - { - "data": { - "text/plain": [ - "
" - ], - "image/png": "iVBORw0KGgoAAAANSUhEUgAAB8YAAAC+CAYAAABH0WVyAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAABrOklEQVR4nO3dd3gU1f7H8c+mhxRCCb2H3ptUKQJSroLolWKhCYJYUVHxKiCoNMGCigWlihQRUCkBpClIr9JD7x3S+87vD8z+siYhgWSzmeT9ep48Nzt7ZufzPZlz5OZkZiyGYRgCAAAAAAAAAAAAACCXcnF2AAAAAAAAAAAAAAAAHImFcQAAAAAAAAAAAABArsbCOAAAAAAAAAAAAAAgV2NhHAAAAAAAAAAAAACQq7EwDgAAAAAAAAAAAADI1VgYBwAAAAAAAAAAAADkaiyMAwAAAAAAAAAAAAByNRbGAQAAAAAAAAAAAAC5GgvjAAAAAAAAAAAAAIBcjYVxAAAAAIDp9e3bV+XKlcvSz5wxY4YsFotOnTqVpZ+b161fv14Wi0Xr1693dpQ0WSwWvffee86OAQAAAADIQiyMAwAAAAAkScePH9egQYNUoUIFeXl5yd/fX82bN9dnn32m6OhoZ8dzmDFjxmjJkiXOjmGTtCCf1teWLVucHTFDpkyZohkzZjg7hqT0+zTpK6v/uCI3ad26tWrWrOnsGAAAAABwz9ycHQAAAAAA4HzLli1Tt27d5Onpqd69e6tmzZqKi4vTxo0b9cYbb+jAgQP69ttvnR3TIcaMGaPHH39cXbt2tdveq1cv9ezZU56enk7JNXr0aJUvXz7F9ooVKzohzd2bMmWKChcurL59+9ptb9mypaKjo+Xh4ZFtWVq2bKnZs2fbbRswYIAaNWqkgQMH2rb5+vpKkqKjo+Xmxq9MAAAAACA34f/lAQAAAEAed/LkSfXs2VNly5bV2rVrVbx4cdt7L7zwgo4dO6Zly5Y5MaFzuLq6ytXV1WnH79Spkxo2bOi04zuKi4uLvLy8svWYFSpUUIUKFey2Pffcc6pQoYKefvrpFO2zO19OYLVaFRcXl2tqj4yMlI+Pj7NjAAAAAMhBuJU6AAAAAORxEyZMUEREhL7//nu7RfEkFStW1CuvvCJJOnXqlCwWS6q3yP73c5nfe+89WSwWHT16VE8//bTy58+vwMBADR8+XIZh6OzZs3rkkUfk7++vYsWKadKkSXafl9YzvjP6jOqJEyeqWbNmKlSokLy9vdWgQQMtXLgwRebIyEjNnDnTdjvtpCuc/338hx9+OMXiapKmTZumWMT+4Ycf1KBBA3l7e6tgwYLq2bOnzp49e8fMd2PkyJFycXHRmjVr7LYPHDhQHh4e2rt3r23b1q1b1bFjR+XPn1/58uVTq1attGnTphSfef78efXv318lSpSQp6enypcvr8GDBysuLk7S//9M/+3ffVWuXDkdOHBAGzZssPVr69atJaX98/vpp59s/VW4cGE9/fTTOn/+vF2bvn37ytfXV+fPn1fXrl3l6+urwMBADR06VImJiXfbhWnK6nNZkmJjYzVy5EhVrFhRnp6eKl26tN58803FxsammyfpNuY7d+5Us2bN5O3trfLly+vrr7++5+NYLBa9+OKLmjNnjmrUqCFPT08FBwfffWcls2/fPvXt29f2OIZixYrpmWee0fXr121t1q1bJ4vFosWLF6fY/8cff5TFYtHmzZtt2w4fPqzHH39cBQsWlJeXlxo2bKhff/3Vbr+k82/Dhg16/vnnVaRIEZUqVSpTtQAAAADIfVgYBwAAAIA87rffflOFChXUrFkzh3x+jx49ZLVaNW7cODVu3FgffPCBPv30Uz344IMqWbKkxo8fr4oVK2ro0KH6448/suy4n332merVq6fRo0drzJgxcnNzU7du3eyufp89e7Y8PT3VokULzZ49W7Nnz9agQYPSrOPkyZPavn273fbTp09ry5Yt6tmzp23bhx9+qN69e6tSpUr6+OOPNWTIEK1Zs0YtW7bUrVu3MpQ/NDRU165ds/tKvsD47rvvqm7duurfv7/Cw8MlSStXrtTUqVM1YsQI1alTR5K0du1atWzZUmFhYRo5cqTGjBmjW7duqU2bNtq2bZvt8y5cuKBGjRpp3rx56tGjhyZPnqxevXppw4YNioqKylDmJJ9++qlKlSqlqlWr2vr1nXfeSbP9jBkz1L17d7m6umrs2LF69tlntWjRIt1///0p+isxMVEdOnRQoUKFNHHiRLVq1UqTJk3Kllv93+u5bLVa1aVLF02cOFGdO3fW559/rq5du+qTTz5Rjx49MnTsmzdv6j//+Y8aNGigCRMmqFSpUho8eLCmTZt2z8dZu3atXn31VfXo0UOfffZZpp+xvnr1ap04cUL9+vXT559/rp49e2revHn6z3/+I8MwJN1e5C9durTmzJmTYv85c+YoKChITZs2lSQdOHBATZo00aFDhzRs2DBNmjRJPj4+6tq1a6oL688//7wOHjyoESNGaNiwYZmqBQAAAEAuZAAAAAAA8qzQ0FBDkvHII49kqP3JkycNScb06dNTvCfJGDlypO31yJEjDUnGwIEDbdsSEhKMUqVKGRaLxRg3bpxt+82bNw1vb2+jT58+tm3Tp083JBknT560O866desMSca6dets2/r06WOULVvWrl1UVJTd67i4OKNmzZpGmzZt7Lb7+PjYHTet44eGhhqenp7G66+/btduwoQJhsViMU6fPm0YhmGcOnXKcHV1NT788EO7dn///bfh5uaWYntax03ty9PTM8Vnenh4GAMGDDBu3rxplCxZ0mjYsKERHx9vGIZhWK1Wo1KlSkaHDh0Mq9Vq1zfly5c3HnzwQdu23r17Gy4uLsb27dtTZEraN+lnml5fGYZh1KhRw2jVqlWKtv/++cXFxRlFihQxatasaURHR9vaLV261JBkjBgxwratT58+hiRj9OjRdp9Zr149o0GDBimOdSdp/dwNI+vP5dmzZxsuLi7Gn3/+aXecr7/+2pBkbNq06Y5ZW7VqZUgyJk2aZNsWGxtr1K1b1yhSpIgRFxd318eRZLi4uBgHDhy447GTZ6hRo8Yd2/x7zBmGYcydO9eQZPzxxx+2bW+//bbh6elp3Lp1y7btypUrhpubm12/t23b1qhVq5YRExNj22a1Wo1mzZoZlSpVsm1LOv/uv/9+IyEhIUP1AAAAAMh7uGIcAAAAAPKwsLAwSZKfn5/DjjFgwADb966urmrYsKEMw1D//v1t2wMCAlSlShWdOHEiy47r7e1t+/7mzZsKDQ1VixYttGvXrnv6PH9/f3Xq1EkLFiywXf0qSfPnz1eTJk1UpkwZSdKiRYtktVrVvXt3u6u9ixUrpkqVKmndunUZOt6XX36p1atX232tWLHCrk3NmjU1atQofffdd+rQoYOuXbummTNnys3NTZK0Z88ehYSE6Mknn9T169dtWSIjI9W2bVv98ccfslqtslqtWrJkiTp37pzqc81Tu316VtmxY4euXLmi559/3u751g899JCqVq2a6vPtn3vuObvXLVq0yNJzJy33ei7/9NNPqlatmqpWrWp3TrRp00aS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1VdfTbevcrpevXppwYIFeu6557Ru3To1b95ciYmJOnz4sBYsWKCVK1em+zz5EiVKaPz48Tp16pQqV66s+fPna8+ePfr2229tz63PiuPcydWrV/XBBx+k2F6+fHk99dRTatmypSZMmKD4+HiVLFlSq1at0smTJ9P8vN69e+vxxx+XJL3//vsp3v/yyy91//33q1atWnr22WdVoUIFXb58WZs3b9a5c+e0d+/ee64FAAAAQN7DwjgAAAAAQF26dNG+ffv00Ucf6ZdfftFXX30lT09P1a5dW5MmTdKzzz5raztixAhdvXpVCxcu1IIFC9SpUyetWLFCRYoUyfJcc+bM0aBBgzRu3DgFBASof//+euCBB/Tggw/ecb82bdro+++/17hx4zRkyBCVL1/etqj474Xxjz/+WAMHDtS7776r6Oho9enT544L415eXurSpYvmzJmjdu3apVr3sGHDVLlyZX3yyScaNWqUpNvPd27fvr26dOmSodqT3446uenTp6ts2bLq06ePChcubHdFbqVKlTR27Fi98sorWrBggbp3767WrVtr8+bNev/99/XFF18oIiJCxYoVU+PGjTVo0CDbviVLltTWrVs1fPhwzZkzR2FhYSpZsqQ6deqkfPnySbq9iL148WI9//zzGj58uIoVK6YhQ4aoQIEC6tevX4r8p0+f1oQJExQeHq5WrVqlujAuSX379lW+fPk0btw4vfXWW/Lx8dGjjz6q8ePH292y3axcXFy0ZMkSffLJJ5o1a5YWL16sfPnyqUKFCnrllVcydMv9AgUKaObMmXrppZc0depUFS1aVF988YXd2MyK49zJlStXNHz48BTb27Ztq6eeeko//vijXnrpJX355ZcyDEPt27fXihUr7B41kFznzp1VoEABWa3WVMdF9erVtWPHDo0aNUozZszQ9evXVaRIEdWrVy/N8QEAAAAAabEY/77HFQAAAAAAAHKM1q1b69q1a+k+A95sEhISVKJECXXu3Fnff/+9s+MAAAAA6erXr58sFkua70+bNi0b0+Bu8YxxAAAAAAAAZLslS5bo6tWr6t27t7OjAAAAABnSsGFDNWjQQB4eHtqyZYsqVKigoKAgbdu2TZ6ens6Oh3RwxTgAAAAAAEAOltuuGN+6dav27dun999/X4ULF9auXbucHQkAAAC4Ky1bttTSpUvl7+8vSQoLC9PD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Xbp0ScWLF9fmzZvVpEkTffDBB/rzzz+1cuVK2+eeO3dOpUuX1pEjR1S5cuUUeZYsWaLHH39c8fHxslgskqRFixapX79+OnfunPz8/Ozax8bGqmDBgvr999/VtGlT2/YBAwYoKipKP/74o/73v/9p3rx5OnLkiN1CdJKSJUvqhRde0P/+9z/btkaNGum+++7Tl19+qVOnTql8+fL67rvv1L9/f0nSwYMHVaNGDR06dEhVq1bVk08+qdDQUC1btsz2GT179lRwcLCtb/39/fX555+rT58+af486tevr0ceeUQjR45Msw0AAAAAIGfhinEAAAAAAHKR2rVr2753dXVVoUKFVKtWLdu2okWLSpKuXLki6fatw9etW2d7Zrmvr6+qVq0qSWneLjw6Olqenp62RXFJevDBB1W2bFlVqFBBvXr10pw5c2xXpR87dkxRUVF68MEH7Y4za9Ys2zH27NmjFi1apLooHhYWpgsXLqh58+Z225s3b65Dhw6lWX/x4sXtaj106JAaN25s1z75Qr0kvfbaaxowYIDatWuncePGpdoH3t7ettoAAAAAAObg5uwAAAAAAAAg6/x7YdlisdhtS1rMtlqtkqSIiAh17txZ48ePT/FZSQvL/1a4cGFFRUUpLi5OHh4ekiQ/Pz/t2rVL69ev16pVqzRixAi999572r59uyIiIiRJy5YtU8mSJe0+y9PTU9LtxeascKdaM+K9997Tk08+qWXLlmnFihUaOXKk5s2bp0cffdTW5saNGwoMDMySvAAAAACA7MEV4wAAAAAA5GH169fXgQMHVK5cOVWsWNHuy8fHJ9V96tatK+n2rcqTc3NzU7t27TRhwgTt27dPp06d0tq1a1W9enV5enrqzJkzKY5RunRpSbev9P7zzz8VHx+f4nj+/v4qUaKENm3aZLd906ZNql69eoZrrVatmrZu3Wq3bcuWLSnaVa5cWa+++qpWrVqlxx57TNOnT7e9FxMTo+PHj6tevXoZPi4AAAAAwPlYGAcAAAAAIA974YUXdOPGDT3xxBPavn27jh8/rpUrV6pfv35KTExMdZ/AwEDVr19fGzdutG1bunSpJk+erD179uj06dOaNWuWrFarqlSpIj8/Pw0dOlSvvvqqZs6cqePHj2vXrl36/PPPNXPmTEnSiy++qLCwMPXs2VM7duxQSEiIZs+erSNHjkiS3njjDY0fP17z58/XkSNHNGzYMO3Zs0evvPJKhmt9+eWXFRwcrIkTJyokJERffPGFgoODbe9HR0frxRdf1Pr163X69Glt2rRJ27dvV7Vq1WxttmzZIk9PzxS3YAcAAAAA5GwsjAMAAAAAkIclXYmdmJio9u3bq1atWhoyZIgCAgLk4pL2rw0GDBigOXPm2F4HBARo0aJFatOmjapVq6avv/5ac+fOVY0aNSRJ77//voYPH66xY8eqWrVq6tixo5YtW6by5ctLkgoVKqS1a9cqIiJCrVq1UoMGDTR16lTbrdFffvllvfbaa3r99ddVq1YtBQcH69dff1WlSpUyXGuTJk00depUffbZZ6pTp45WrVqld9991/a+q6urrl+/rt69e6ty5crq3r27OnXqpFGjRtnazJ07V0899ZTy5cuX4eMCAAAAAJzPYhiG4ewQAAAAAADAXKKjo1WlShXNnz8/z1w9fe3aNVWpUkU7duywLegDAAAAAMyBK8YBAAAAAMBd8/b21qxZs3Tt2jVnR8k2p06d0pQpU1gUBwAAAAAT4opxAAAAAAAAAAAAAECuxhXjAAAAAAAAAAAAAIBcjYVxAAAAAAAAAAAAAECuxsI4AAAAAAAAAAAAACBXY2EcAAAAAAAAAAAAAJCrsTAOAAAAAAAAAAAAAMjVWBgHAAAAAAAAAAAAAORqLIwDAAAAAAAAAAAAAHI1FsYBAAAAAAAAAAAAALkaC+MAAAAAAAAAAAAAgFyNhXEAAAAAAAAAAAAAQK72fy1wqZrluNbjAAAAAElFTkSuQmCC" - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "execution_count": 22 - }, - { - "metadata": {}, - "cell_type": "markdown", - "source": "Each Bottleneck has 3-4 convolution layers (conv2d)", - "id": "c3703f49cbc25701" - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-18T15:04:34.466492Z", - "start_time": "2024-11-18T15:04:34.462882Z" - } - }, - "cell_type": "code", - "source": "", - "id": "caa41ea183b86829", - "outputs": [], - "execution_count": null - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 2 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.6" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/resnet50/split_parts_bottlenecks.ipynb b/resnet50/split_parts_bottlenecks.ipynb deleted file mode 100644 index ef5a3a2fef1c5a5f2ed3c39b119a86590f77cc0c..0000000000000000000000000000000000000000 --- a/resnet50/split_parts_bottlenecks.ipynb +++ /dev/null @@ -1,1267 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "id": "5ab0b676821097a2", - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-12T14:26:12.986879Z", - "start_time": "2024-11-12T14:26:08.707979Z" - } - }, - "source": [ - "import torch\n", - "from main_torch import read_paths_images, load_images, transform, inference, inference_three_models, inference_mult_models\n", - "# Download resnet18 model\n", - "from torchvision import models\n", - "from torchvision.models.resnet import Bottleneck\n", - "\n", - "model = torch.load('models/pytorch_model.pth')\n", - "\n", - "x = torch.randn(2, 3, 224, 224)\n", - "model.eval()\n", - "\n", - "print(model(x).argmax().item())\n" - ], - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0\n" - ] - } - ], - "execution_count": 1 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-12T14:26:13.075405Z", - "start_time": "2024-11-12T14:26:13.066652Z" - } - }, - "cell_type": "code", - "source": "print(model)", - "id": "aaa1a2950a1e47ef", - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Sequential(\n", - " (0): Sequential(\n", - " (0): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n", - " (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU(inplace=True)\n", - " (3): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)\n", - " (4): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " (5): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (3): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " (6): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(512, 1024, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (3): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (4): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (5): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " (7): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(1024, 2048, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " )\n", - " (1): Sequential(\n", - " (0): AdaptiveConcatPool2d(\n", - " (ap): AdaptiveAvgPool2d(output_size=1)\n", - " (mp): AdaptiveMaxPool2d(output_size=1)\n", - " )\n", - " (1): fastai.layers.Flatten(full=False)\n", - " (2): BatchNorm1d(4096, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (3): Dropout(p=0.25, inplace=False)\n", - " (4): Linear(in_features=4096, out_features=512, bias=True)\n", - " (5): ReLU(inplace=True)\n", - " (6): BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (7): Dropout(p=0.5, inplace=False)\n", - " (8): Linear(in_features=512, out_features=2, bias=True)\n", - " )\n", - ")\n" - ] - } - ], - "execution_count": 2 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-12T14:26:13.439726Z", - "start_time": "2024-11-12T14:26:13.189217Z" - } - }, - "cell_type": "code", - "source": [ - "def join_sequentials(children):\n", - " all_grand_children = []\n", - " for i, child in enumerate(children):\n", - " if isinstance(child, torch.nn.Sequential):\n", - " grand_children = list(child.children())\n", - " all_grand_children.extend(grand_children)\n", - " elif isinstance(child, Bottleneck):\n", - " grand_children = list(child.children())\n", - " all_grand_children.extend(grand_children)\n", - " print(grand_children)\n", - " elif isinstance(child, torch.nn.Linear):\n", - " all_grand_children.append(torch.nn.Flatten())\n", - " all_grand_children.append(child)\n", - " else:\n", - " all_grand_children.append(child)\n", - " return all_grand_children\n", - "\n", - "children = list(model.children())\n", - "all_grand_children = join_sequentials(children)\n", - "new_model = torch.nn.Sequential(*all_grand_children)\n", - "print(new_model(x).argmax().item())" - ], - "id": "f1a0c135ed5bc117", - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0\n" - ] - } - ], - "execution_count": 3 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-12T14:26:13.546433Z", - "start_time": "2024-11-12T14:26:13.529547Z" - } - }, - "cell_type": "code", - "source": "new_model", - "id": "e83f337be138f11d", - "outputs": [ - { - "data": { - "text/plain": [ - "Sequential(\n", - " (0): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n", - " (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU(inplace=True)\n", - " (3): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)\n", - " (4): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " (5): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (3): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " (6): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(512, 1024, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (3): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (4): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (5): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " (7): Sequential(\n", - " (0): Bottleneck(\n", - " (conv1): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(1024, 2048, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (1): Bottleneck(\n", - " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (2): Bottleneck(\n", - " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " )\n", - " (8): AdaptiveConcatPool2d(\n", - " (ap): AdaptiveAvgPool2d(output_size=1)\n", - " (mp): AdaptiveMaxPool2d(output_size=1)\n", - " )\n", - " (9): fastai.layers.Flatten(full=False)\n", - " (10): BatchNorm1d(4096, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (11): Dropout(p=0.25, inplace=False)\n", - " (12): Linear(in_features=4096, out_features=512, bias=True)\n", - " (13): ReLU(inplace=True)\n", - " (14): BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (15): Dropout(p=0.5, inplace=False)\n", - " (16): Linear(in_features=512, out_features=2, bias=True)\n", - ")" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "execution_count": 4 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-12T14:26:13.922545Z", - "start_time": "2024-11-12T14:26:13.680435Z" - } - }, - "cell_type": "code", - "source": [ - "children = list(new_model.children())\n", - "all_grand_children = join_sequentials(children)\n", - "new_model = torch.nn.Sequential(*all_grand_children)\n", - "print(new_model(x).argmax().item())" - ], - "id": "9852b3a24b050f2a", - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0\n" - ] - } - ], - "execution_count": 5 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-12T14:26:14.009359Z", - "start_time": "2024-11-12T14:26:13.998282Z" - } - }, - "cell_type": "code", - "source": "print(new_model)", - "id": "3eea3c6b8e48527a", - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Sequential(\n", - " (0): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n", - " (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU(inplace=True)\n", - " (3): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)\n", - " (4): Bottleneck(\n", - " (conv1): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (5): Bottleneck(\n", - " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (6): Bottleneck(\n", - " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (7): Bottleneck(\n", - " (conv1): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (8): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (9): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (10): Bottleneck(\n", - " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (11): Bottleneck(\n", - " (conv1): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(512, 1024, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (12): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (13): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (14): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (15): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (16): Bottleneck(\n", - " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (17): Bottleneck(\n", - " (conv1): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " (downsample): Sequential(\n", - " (0): Conv2d(1024, 2048, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " )\n", - " (18): Bottleneck(\n", - " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (19): Bottleneck(\n", - " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (relu): ReLU(inplace=True)\n", - " )\n", - " (20): AdaptiveConcatPool2d(\n", - " (ap): AdaptiveAvgPool2d(output_size=1)\n", - " (mp): AdaptiveMaxPool2d(output_size=1)\n", - " )\n", - " (21): fastai.layers.Flatten(full=False)\n", - " (22): BatchNorm1d(4096, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (23): Dropout(p=0.25, inplace=False)\n", - " (24): Flatten(start_dim=1, end_dim=-1)\n", - " (25): Linear(in_features=4096, out_features=512, bias=True)\n", - " (26): ReLU(inplace=True)\n", - " (27): BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (28): Dropout(p=0.5, inplace=False)\n", - " (29): Flatten(start_dim=1, end_dim=-1)\n", - " (30): Linear(in_features=512, out_features=2, bias=True)\n", - ")\n" - ] - } - ], - "execution_count": 6 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-12T14:26:14.103388Z", - "start_time": "2024-11-12T14:26:14.092175Z" - } - }, - "cell_type": "code", - "source": [ - "def join_sequentials(children):\n", - " all_grand_children = []\n", - " for i, child in enumerate(children):\n", - " if isinstance(child, torch.nn.Sequential):\n", - " grand_children = list(child.children())\n", - " all_grand_children.extend(grand_children)\n", - " elif isinstance(child, Bottleneck):\n", - " grand_children = list(child.children())\n", - " all_grand_children.extend(grand_children)\n", - " print(grand_children)\n", - " elif isinstance(child, torch.nn.Linear):\n", - " all_grand_children.append(torch.nn.Flatten())\n", - " all_grand_children.append(child)\n", - " else:\n", - " all_grand_children.append(child)\n", - " return all_grand_children\n", - "\n", - "children = list(new_model.children())\n", - "all_grand_children = join_sequentials(children)\n", - "new_model = torch.nn.Sequential(*all_grand_children)\n", - "# print(new_model(x).argmax().item())" - ], - "id": "7e6d7cec7d459e2d", - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False), BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False), BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False), BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), ReLU(inplace=True), Sequential(\n", - " (0): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - ")]\n", - "[Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False), BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False), BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False), BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), ReLU(inplace=True)]\n", - "[Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False), BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False), BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False), BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), ReLU(inplace=True)]\n", - "[Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False), BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False), BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False), BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), ReLU(inplace=True), Sequential(\n", - " (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - ")]\n", - "[Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False), BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False), BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False), BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), ReLU(inplace=True)]\n", - "[Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False), BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False), BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False), BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), ReLU(inplace=True)]\n", - "[Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False), BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False), BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False), BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), ReLU(inplace=True)]\n", - "[Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False), BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), Conv2d(256, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False), BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False), BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), ReLU(inplace=True), Sequential(\n", - " (0): Conv2d(512, 1024, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - ")]\n", - "[Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False), BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False), BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False), BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), ReLU(inplace=True)]\n", - "[Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False), BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False), BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False), BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), ReLU(inplace=True)]\n", - "[Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False), BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False), BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False), BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), ReLU(inplace=True)]\n", - "[Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False), BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False), BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False), BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), ReLU(inplace=True)]\n", - "[Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False), BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False), BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False), BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), ReLU(inplace=True)]\n", - "[Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False), BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), Conv2d(512, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False), BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False), BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), ReLU(inplace=True), Sequential(\n", - " (0): Conv2d(1024, 2048, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - ")]\n", - "[Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False), BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False), BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False), BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), ReLU(inplace=True)]\n", - "[Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False), BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False), BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False), BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), ReLU(inplace=True)]\n" - ] - } - ], - "execution_count": 7 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-12T14:26:14.263851Z", - "start_time": "2024-11-12T14:26:14.258321Z" - } - }, - "cell_type": "code", - "source": "print(new_model)", - "id": "9d2e252bc9ddaf70", - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Sequential(\n", - " (0): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n", - " (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (2): ReLU(inplace=True)\n", - " (3): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)\n", - " (4): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (5): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (6): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (7): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (8): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (9): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (10): ReLU(inplace=True)\n", - " (11): Sequential(\n", - " (0): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " (12): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (13): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (14): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (15): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (16): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (17): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (18): ReLU(inplace=True)\n", - " (19): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (20): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (21): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (22): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (23): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (24): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (25): ReLU(inplace=True)\n", - " (26): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (27): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (28): Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (29): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (30): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (31): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (32): ReLU(inplace=True)\n", - " (33): Sequential(\n", - " (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " (34): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (35): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (36): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (37): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (38): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (39): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (40): ReLU(inplace=True)\n", - " (41): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (42): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (43): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (44): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (45): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (46): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (47): ReLU(inplace=True)\n", - " (48): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (49): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (50): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (51): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (52): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (53): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (54): ReLU(inplace=True)\n", - " (55): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (56): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (57): Conv2d(256, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (58): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (59): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (60): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (61): ReLU(inplace=True)\n", - " (62): Sequential(\n", - " (0): Conv2d(512, 1024, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " (63): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (64): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (65): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (66): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (67): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (68): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (69): ReLU(inplace=True)\n", - " (70): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (71): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (72): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (73): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (74): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (75): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (76): ReLU(inplace=True)\n", - " (77): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (78): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (79): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (80): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (81): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (82): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (83): ReLU(inplace=True)\n", - " (84): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (85): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (86): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (87): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (88): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (89): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (90): ReLU(inplace=True)\n", - " (91): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (92): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (93): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (94): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (95): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (96): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (97): ReLU(inplace=True)\n", - " (98): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (99): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (100): Conv2d(512, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", - " (101): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (102): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (103): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (104): ReLU(inplace=True)\n", - " (105): Sequential(\n", - " (0): Conv2d(1024, 2048, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", - " (1): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " )\n", - " (106): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (107): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (108): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (109): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (110): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (111): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (112): ReLU(inplace=True)\n", - " (113): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (114): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (115): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", - " (116): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (117): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", - " (118): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (119): ReLU(inplace=True)\n", - " (120): AdaptiveConcatPool2d(\n", - " (ap): AdaptiveAvgPool2d(output_size=1)\n", - " (mp): AdaptiveMaxPool2d(output_size=1)\n", - " )\n", - " (121): fastai.layers.Flatten(full=False)\n", - " (122): BatchNorm1d(4096, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (123): Dropout(p=0.25, inplace=False)\n", - " (124): Flatten(start_dim=1, end_dim=-1)\n", - " (125): Flatten(start_dim=1, end_dim=-1)\n", - " (126): Linear(in_features=4096, out_features=512, bias=True)\n", - " (127): ReLU(inplace=True)\n", - " (128): BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (129): Dropout(p=0.5, inplace=False)\n", - " (130): Flatten(start_dim=1, end_dim=-1)\n", - " (131): Flatten(start_dim=1, end_dim=-1)\n", - " (132): Linear(in_features=512, out_features=2, bias=True)\n", - ")\n" - ] - } - ], - "execution_count": 8 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-12T14:26:14.666952Z", - "start_time": "2024-11-12T14:26:14.486902Z" - } - }, - "cell_type": "code", - "source": [ - "# Save model\n", - "torch.save(new_model, 'models/new_model.pth')" - ], - "id": "8ac523ced1e3d2ef", - "outputs": [], - "execution_count": 9 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-08T14:16:30.848433Z", - "start_time": "2024-11-08T14:16:30.752461Z" - } - }, - "cell_type": "code", - "source": [ - "children = list(new_model.children())\n", - "all_grand_children = join_sequentials(children)\n", - "new_model = torch.nn.Sequential(*all_grand_children)\n", - "print(new_model(x).argmax().item())" - ], - "id": "8bf4102434178e3e", - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2\n" - ] - } - ], - "execution_count": 15 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-08T15:08:42.522208Z", - "start_time": "2024-11-08T15:08:42.448934Z" - } - }, - "cell_type": "code", - "source": [ - "x = torch.randn(2, 3, 224, 224)\n", - "y = new_model(x)\n", - "print(y.argmax().item())\n", - "print(new_model)" - ], - "id": "f752dc802d00da42", - "outputs": [ - { - "ename": "RuntimeError", - "evalue": "Given groups=1, weight of size [256, 64, 1, 1], expected input[2, 256, 56, 56] to have 64 channels, but got 256 channels instead", - "output_type": "error", - "traceback": [ - "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m", - "\u001B[0;31mRuntimeError\u001B[0m Traceback (most recent call last)", - "Cell \u001B[0;32mIn[62], line 2\u001B[0m\n\u001B[1;32m 1\u001B[0m x \u001B[38;5;241m=\u001B[39m torch\u001B[38;5;241m.\u001B[39mrandn(\u001B[38;5;241m2\u001B[39m, \u001B[38;5;241m3\u001B[39m, \u001B[38;5;241m224\u001B[39m, \u001B[38;5;241m224\u001B[39m)\n\u001B[0;32m----> 2\u001B[0m y \u001B[38;5;241m=\u001B[39m new_model(x)\n\u001B[1;32m 3\u001B[0m \u001B[38;5;28mprint\u001B[39m(y\u001B[38;5;241m.\u001B[39margmax()\u001B[38;5;241m.\u001B[39mitem())\n\u001B[1;32m 4\u001B[0m \u001B[38;5;28mprint\u001B[39m(new_model)\n", - "File \u001B[0;32m~/anaconda3/envs/python311/lib/python3.11/site-packages/torch/nn/modules/module.py:1511\u001B[0m, in \u001B[0;36mModule._wrapped_call_impl\u001B[0;34m(self, *args, **kwargs)\u001B[0m\n\u001B[1;32m 1509\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_compiled_call_impl(\u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs) \u001B[38;5;66;03m# type: ignore[misc]\u001B[39;00m\n\u001B[1;32m 1510\u001B[0m \u001B[38;5;28;01melse\u001B[39;00m:\n\u001B[0;32m-> 1511\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_call_impl(\u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs)\n", - "File \u001B[0;32m~/anaconda3/envs/python311/lib/python3.11/site-packages/torch/nn/modules/module.py:1520\u001B[0m, in \u001B[0;36mModule._call_impl\u001B[0;34m(self, *args, **kwargs)\u001B[0m\n\u001B[1;32m 1515\u001B[0m \u001B[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001B[39;00m\n\u001B[1;32m 1516\u001B[0m \u001B[38;5;66;03m# this function, and just call forward.\u001B[39;00m\n\u001B[1;32m 1517\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m (\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_backward_hooks \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_backward_pre_hooks \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_forward_hooks \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_forward_pre_hooks\n\u001B[1;32m 1518\u001B[0m \u001B[38;5;129;01mor\u001B[39;00m _global_backward_pre_hooks \u001B[38;5;129;01mor\u001B[39;00m _global_backward_hooks\n\u001B[1;32m 1519\u001B[0m \u001B[38;5;129;01mor\u001B[39;00m _global_forward_hooks \u001B[38;5;129;01mor\u001B[39;00m _global_forward_pre_hooks):\n\u001B[0;32m-> 1520\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m forward_call(\u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs)\n\u001B[1;32m 1522\u001B[0m \u001B[38;5;28;01mtry\u001B[39;00m:\n\u001B[1;32m 1523\u001B[0m result \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;01mNone\u001B[39;00m\n", - "File \u001B[0;32m~/anaconda3/envs/python311/lib/python3.11/site-packages/torch/nn/modules/container.py:217\u001B[0m, in \u001B[0;36mSequential.forward\u001B[0;34m(self, input)\u001B[0m\n\u001B[1;32m 215\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m \u001B[38;5;21mforward\u001B[39m(\u001B[38;5;28mself\u001B[39m, \u001B[38;5;28minput\u001B[39m):\n\u001B[1;32m 216\u001B[0m \u001B[38;5;28;01mfor\u001B[39;00m module \u001B[38;5;129;01min\u001B[39;00m \u001B[38;5;28mself\u001B[39m:\n\u001B[0;32m--> 217\u001B[0m \u001B[38;5;28minput\u001B[39m \u001B[38;5;241m=\u001B[39m module(\u001B[38;5;28minput\u001B[39m)\n\u001B[1;32m 218\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28minput\u001B[39m\n", - "File \u001B[0;32m~/anaconda3/envs/python311/lib/python3.11/site-packages/torch/nn/modules/module.py:1511\u001B[0m, in \u001B[0;36mModule._wrapped_call_impl\u001B[0;34m(self, *args, **kwargs)\u001B[0m\n\u001B[1;32m 1509\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_compiled_call_impl(\u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs) \u001B[38;5;66;03m# type: ignore[misc]\u001B[39;00m\n\u001B[1;32m 1510\u001B[0m \u001B[38;5;28;01melse\u001B[39;00m:\n\u001B[0;32m-> 1511\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_call_impl(\u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs)\n", - "File \u001B[0;32m~/anaconda3/envs/python311/lib/python3.11/site-packages/torch/nn/modules/module.py:1520\u001B[0m, in \u001B[0;36mModule._call_impl\u001B[0;34m(self, *args, **kwargs)\u001B[0m\n\u001B[1;32m 1515\u001B[0m \u001B[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001B[39;00m\n\u001B[1;32m 1516\u001B[0m \u001B[38;5;66;03m# this function, and just call forward.\u001B[39;00m\n\u001B[1;32m 1517\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m (\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_backward_hooks \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_backward_pre_hooks \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_forward_hooks \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_forward_pre_hooks\n\u001B[1;32m 1518\u001B[0m \u001B[38;5;129;01mor\u001B[39;00m _global_backward_pre_hooks \u001B[38;5;129;01mor\u001B[39;00m _global_backward_hooks\n\u001B[1;32m 1519\u001B[0m \u001B[38;5;129;01mor\u001B[39;00m _global_forward_hooks \u001B[38;5;129;01mor\u001B[39;00m _global_forward_pre_hooks):\n\u001B[0;32m-> 1520\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m forward_call(\u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs)\n\u001B[1;32m 1522\u001B[0m \u001B[38;5;28;01mtry\u001B[39;00m:\n\u001B[1;32m 1523\u001B[0m result \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;01mNone\u001B[39;00m\n", - "File \u001B[0;32m~/anaconda3/envs/python311/lib/python3.11/site-packages/torch/nn/modules/container.py:217\u001B[0m, in \u001B[0;36mSequential.forward\u001B[0;34m(self, input)\u001B[0m\n\u001B[1;32m 215\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m \u001B[38;5;21mforward\u001B[39m(\u001B[38;5;28mself\u001B[39m, \u001B[38;5;28minput\u001B[39m):\n\u001B[1;32m 216\u001B[0m \u001B[38;5;28;01mfor\u001B[39;00m module \u001B[38;5;129;01min\u001B[39;00m \u001B[38;5;28mself\u001B[39m:\n\u001B[0;32m--> 217\u001B[0m \u001B[38;5;28minput\u001B[39m \u001B[38;5;241m=\u001B[39m module(\u001B[38;5;28minput\u001B[39m)\n\u001B[1;32m 218\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28minput\u001B[39m\n", - "File \u001B[0;32m~/anaconda3/envs/python311/lib/python3.11/site-packages/torch/nn/modules/module.py:1511\u001B[0m, in \u001B[0;36mModule._wrapped_call_impl\u001B[0;34m(self, *args, **kwargs)\u001B[0m\n\u001B[1;32m 1509\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_compiled_call_impl(\u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs) \u001B[38;5;66;03m# type: ignore[misc]\u001B[39;00m\n\u001B[1;32m 1510\u001B[0m \u001B[38;5;28;01melse\u001B[39;00m:\n\u001B[0;32m-> 1511\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_call_impl(\u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs)\n", - "File \u001B[0;32m~/anaconda3/envs/python311/lib/python3.11/site-packages/torch/nn/modules/module.py:1520\u001B[0m, in \u001B[0;36mModule._call_impl\u001B[0;34m(self, *args, **kwargs)\u001B[0m\n\u001B[1;32m 1515\u001B[0m \u001B[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001B[39;00m\n\u001B[1;32m 1516\u001B[0m \u001B[38;5;66;03m# this function, and just call forward.\u001B[39;00m\n\u001B[1;32m 1517\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m (\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_backward_hooks \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_backward_pre_hooks \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_forward_hooks \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_forward_pre_hooks\n\u001B[1;32m 1518\u001B[0m \u001B[38;5;129;01mor\u001B[39;00m _global_backward_pre_hooks \u001B[38;5;129;01mor\u001B[39;00m _global_backward_hooks\n\u001B[1;32m 1519\u001B[0m \u001B[38;5;129;01mor\u001B[39;00m _global_forward_hooks \u001B[38;5;129;01mor\u001B[39;00m _global_forward_pre_hooks):\n\u001B[0;32m-> 1520\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m forward_call(\u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs)\n\u001B[1;32m 1522\u001B[0m \u001B[38;5;28;01mtry\u001B[39;00m:\n\u001B[1;32m 1523\u001B[0m result \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;01mNone\u001B[39;00m\n", - "File \u001B[0;32m~/anaconda3/envs/python311/lib/python3.11/site-packages/torch/nn/modules/conv.py:460\u001B[0m, in \u001B[0;36mConv2d.forward\u001B[0;34m(self, input)\u001B[0m\n\u001B[1;32m 459\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m \u001B[38;5;21mforward\u001B[39m(\u001B[38;5;28mself\u001B[39m, \u001B[38;5;28minput\u001B[39m: Tensor) \u001B[38;5;241m-\u001B[39m\u001B[38;5;241m>\u001B[39m Tensor:\n\u001B[0;32m--> 460\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_conv_forward(\u001B[38;5;28minput\u001B[39m, \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mweight, \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mbias)\n", - "File \u001B[0;32m~/anaconda3/envs/python311/lib/python3.11/site-packages/torch/nn/modules/conv.py:456\u001B[0m, in \u001B[0;36mConv2d._conv_forward\u001B[0;34m(self, input, weight, bias)\u001B[0m\n\u001B[1;32m 452\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mpadding_mode \u001B[38;5;241m!=\u001B[39m \u001B[38;5;124m'\u001B[39m\u001B[38;5;124mzeros\u001B[39m\u001B[38;5;124m'\u001B[39m:\n\u001B[1;32m 453\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m F\u001B[38;5;241m.\u001B[39mconv2d(F\u001B[38;5;241m.\u001B[39mpad(\u001B[38;5;28minput\u001B[39m, \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_reversed_padding_repeated_twice, mode\u001B[38;5;241m=\u001B[39m\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mpadding_mode),\n\u001B[1;32m 454\u001B[0m weight, bias, \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mstride,\n\u001B[1;32m 455\u001B[0m _pair(\u001B[38;5;241m0\u001B[39m), \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mdilation, \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mgroups)\n\u001B[0;32m--> 456\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m F\u001B[38;5;241m.\u001B[39mconv2d(\u001B[38;5;28minput\u001B[39m, weight, bias, \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mstride,\n\u001B[1;32m 457\u001B[0m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mpadding, \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mdilation, \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mgroups)\n", - "\u001B[0;31mRuntimeError\u001B[0m: Given groups=1, weight of size [256, 64, 1, 1], expected input[2, 256, 56, 56] to have 64 channels, but got 256 channels instead" - ] - } - ], - "execution_count": 62 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-08T15:07:06.901171Z", - "start_time": "2024-11-08T15:07:06.898683Z" - } - }, - "cell_type": "code", - "source": "children = list(new_model.children())", - "id": "822c1f2cd8787a7c", - "outputs": [], - "execution_count": 59 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-08T15:07:11.097146Z", - "start_time": "2024-11-08T15:07:10.997644Z" - } - }, - "cell_type": "code", - "source": [ - "class Part(torch.nn.Module):\n", - " def __init__(self, children):\n", - " super(Part, self).__init__()\n", - " self.features = torch.nn.Sequential(*children)\n", - " \n", - " def forward(self, x):\n", - " return self.features(x)\n", - "\n", - "children = list(new_model.children())\n", - "parts = []\n", - "names = []\n", - "for child in children:\n", - " names.append(child.__class__.__name__)\n", - " part = Part([child])\n", - " parts.append(part)\n", - "\n", - "x = torch.randn(2, 3, 224, 224)\n", - "\n", - "for part in parts:\n", - " x = part(x)\n", - " \n", - "print(x.argmax().item())\n" - ], - "id": "a591e52fd2f5dcdf", - "outputs": [ - { - "ename": "RuntimeError", - "evalue": "Given groups=1, weight of size [256, 64, 1, 1], expected input[2, 256, 56, 56] to have 64 channels, but got 256 channels instead", - "output_type": "error", - "traceback": [ - "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m", - "\u001B[0;31mRuntimeError\u001B[0m Traceback (most recent call last)", - "Cell \u001B[0;32mIn[60], line 20\u001B[0m\n\u001B[1;32m 17\u001B[0m x \u001B[38;5;241m=\u001B[39m torch\u001B[38;5;241m.\u001B[39mrandn(\u001B[38;5;241m2\u001B[39m, \u001B[38;5;241m3\u001B[39m, \u001B[38;5;241m224\u001B[39m, \u001B[38;5;241m224\u001B[39m)\n\u001B[1;32m 19\u001B[0m \u001B[38;5;28;01mfor\u001B[39;00m part \u001B[38;5;129;01min\u001B[39;00m parts:\n\u001B[0;32m---> 20\u001B[0m x \u001B[38;5;241m=\u001B[39m part(x)\n\u001B[1;32m 22\u001B[0m \u001B[38;5;28mprint\u001B[39m(x\u001B[38;5;241m.\u001B[39margmax()\u001B[38;5;241m.\u001B[39mitem())\n", - "File \u001B[0;32m~/anaconda3/envs/python311/lib/python3.11/site-packages/torch/nn/modules/module.py:1511\u001B[0m, in \u001B[0;36mModule._wrapped_call_impl\u001B[0;34m(self, *args, **kwargs)\u001B[0m\n\u001B[1;32m 1509\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_compiled_call_impl(\u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs) \u001B[38;5;66;03m# type: ignore[misc]\u001B[39;00m\n\u001B[1;32m 1510\u001B[0m \u001B[38;5;28;01melse\u001B[39;00m:\n\u001B[0;32m-> 1511\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_call_impl(\u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs)\n", - "File \u001B[0;32m~/anaconda3/envs/python311/lib/python3.11/site-packages/torch/nn/modules/module.py:1520\u001B[0m, in \u001B[0;36mModule._call_impl\u001B[0;34m(self, *args, **kwargs)\u001B[0m\n\u001B[1;32m 1515\u001B[0m \u001B[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001B[39;00m\n\u001B[1;32m 1516\u001B[0m \u001B[38;5;66;03m# this function, and just call forward.\u001B[39;00m\n\u001B[1;32m 1517\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m (\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_backward_hooks \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_backward_pre_hooks \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_forward_hooks \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_forward_pre_hooks\n\u001B[1;32m 1518\u001B[0m \u001B[38;5;129;01mor\u001B[39;00m _global_backward_pre_hooks \u001B[38;5;129;01mor\u001B[39;00m _global_backward_hooks\n\u001B[1;32m 1519\u001B[0m \u001B[38;5;129;01mor\u001B[39;00m _global_forward_hooks \u001B[38;5;129;01mor\u001B[39;00m _global_forward_pre_hooks):\n\u001B[0;32m-> 1520\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m forward_call(\u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs)\n\u001B[1;32m 1522\u001B[0m \u001B[38;5;28;01mtry\u001B[39;00m:\n\u001B[1;32m 1523\u001B[0m result \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;01mNone\u001B[39;00m\n", - "Cell \u001B[0;32mIn[60], line 7\u001B[0m, in \u001B[0;36mPart.forward\u001B[0;34m(self, x)\u001B[0m\n\u001B[1;32m 6\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m \u001B[38;5;21mforward\u001B[39m(\u001B[38;5;28mself\u001B[39m, x):\n\u001B[0;32m----> 7\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mfeatures(x)\n", - "File \u001B[0;32m~/anaconda3/envs/python311/lib/python3.11/site-packages/torch/nn/modules/module.py:1511\u001B[0m, in \u001B[0;36mModule._wrapped_call_impl\u001B[0;34m(self, *args, **kwargs)\u001B[0m\n\u001B[1;32m 1509\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_compiled_call_impl(\u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs) \u001B[38;5;66;03m# type: ignore[misc]\u001B[39;00m\n\u001B[1;32m 1510\u001B[0m \u001B[38;5;28;01melse\u001B[39;00m:\n\u001B[0;32m-> 1511\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_call_impl(\u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs)\n", - "File \u001B[0;32m~/anaconda3/envs/python311/lib/python3.11/site-packages/torch/nn/modules/module.py:1520\u001B[0m, in \u001B[0;36mModule._call_impl\u001B[0;34m(self, *args, **kwargs)\u001B[0m\n\u001B[1;32m 1515\u001B[0m \u001B[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001B[39;00m\n\u001B[1;32m 1516\u001B[0m \u001B[38;5;66;03m# this function, and just call forward.\u001B[39;00m\n\u001B[1;32m 1517\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m (\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_backward_hooks \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_backward_pre_hooks \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_forward_hooks \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_forward_pre_hooks\n\u001B[1;32m 1518\u001B[0m \u001B[38;5;129;01mor\u001B[39;00m _global_backward_pre_hooks \u001B[38;5;129;01mor\u001B[39;00m _global_backward_hooks\n\u001B[1;32m 1519\u001B[0m \u001B[38;5;129;01mor\u001B[39;00m _global_forward_hooks \u001B[38;5;129;01mor\u001B[39;00m _global_forward_pre_hooks):\n\u001B[0;32m-> 1520\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m forward_call(\u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs)\n\u001B[1;32m 1522\u001B[0m \u001B[38;5;28;01mtry\u001B[39;00m:\n\u001B[1;32m 1523\u001B[0m result \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;01mNone\u001B[39;00m\n", - "File \u001B[0;32m~/anaconda3/envs/python311/lib/python3.11/site-packages/torch/nn/modules/container.py:217\u001B[0m, in \u001B[0;36mSequential.forward\u001B[0;34m(self, input)\u001B[0m\n\u001B[1;32m 215\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m \u001B[38;5;21mforward\u001B[39m(\u001B[38;5;28mself\u001B[39m, \u001B[38;5;28minput\u001B[39m):\n\u001B[1;32m 216\u001B[0m \u001B[38;5;28;01mfor\u001B[39;00m module \u001B[38;5;129;01min\u001B[39;00m \u001B[38;5;28mself\u001B[39m:\n\u001B[0;32m--> 217\u001B[0m \u001B[38;5;28minput\u001B[39m \u001B[38;5;241m=\u001B[39m module(\u001B[38;5;28minput\u001B[39m)\n\u001B[1;32m 218\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28minput\u001B[39m\n", - "File \u001B[0;32m~/anaconda3/envs/python311/lib/python3.11/site-packages/torch/nn/modules/module.py:1511\u001B[0m, in \u001B[0;36mModule._wrapped_call_impl\u001B[0;34m(self, *args, **kwargs)\u001B[0m\n\u001B[1;32m 1509\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_compiled_call_impl(\u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs) \u001B[38;5;66;03m# type: ignore[misc]\u001B[39;00m\n\u001B[1;32m 1510\u001B[0m \u001B[38;5;28;01melse\u001B[39;00m:\n\u001B[0;32m-> 1511\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_call_impl(\u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs)\n", - "File \u001B[0;32m~/anaconda3/envs/python311/lib/python3.11/site-packages/torch/nn/modules/module.py:1520\u001B[0m, in \u001B[0;36mModule._call_impl\u001B[0;34m(self, *args, **kwargs)\u001B[0m\n\u001B[1;32m 1515\u001B[0m \u001B[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001B[39;00m\n\u001B[1;32m 1516\u001B[0m \u001B[38;5;66;03m# this function, and just call forward.\u001B[39;00m\n\u001B[1;32m 1517\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m (\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_backward_hooks \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_backward_pre_hooks \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_forward_hooks \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_forward_pre_hooks\n\u001B[1;32m 1518\u001B[0m \u001B[38;5;129;01mor\u001B[39;00m _global_backward_pre_hooks \u001B[38;5;129;01mor\u001B[39;00m _global_backward_hooks\n\u001B[1;32m 1519\u001B[0m \u001B[38;5;129;01mor\u001B[39;00m _global_forward_hooks \u001B[38;5;129;01mor\u001B[39;00m _global_forward_pre_hooks):\n\u001B[0;32m-> 1520\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m forward_call(\u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs)\n\u001B[1;32m 1522\u001B[0m \u001B[38;5;28;01mtry\u001B[39;00m:\n\u001B[1;32m 1523\u001B[0m result \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;01mNone\u001B[39;00m\n", - "File \u001B[0;32m~/anaconda3/envs/python311/lib/python3.11/site-packages/torch/nn/modules/container.py:217\u001B[0m, in \u001B[0;36mSequential.forward\u001B[0;34m(self, input)\u001B[0m\n\u001B[1;32m 215\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m \u001B[38;5;21mforward\u001B[39m(\u001B[38;5;28mself\u001B[39m, \u001B[38;5;28minput\u001B[39m):\n\u001B[1;32m 216\u001B[0m \u001B[38;5;28;01mfor\u001B[39;00m module \u001B[38;5;129;01min\u001B[39;00m \u001B[38;5;28mself\u001B[39m:\n\u001B[0;32m--> 217\u001B[0m \u001B[38;5;28minput\u001B[39m \u001B[38;5;241m=\u001B[39m module(\u001B[38;5;28minput\u001B[39m)\n\u001B[1;32m 218\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28minput\u001B[39m\n", - "File \u001B[0;32m~/anaconda3/envs/python311/lib/python3.11/site-packages/torch/nn/modules/module.py:1511\u001B[0m, in \u001B[0;36mModule._wrapped_call_impl\u001B[0;34m(self, *args, **kwargs)\u001B[0m\n\u001B[1;32m 1509\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_compiled_call_impl(\u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs) \u001B[38;5;66;03m# type: ignore[misc]\u001B[39;00m\n\u001B[1;32m 1510\u001B[0m \u001B[38;5;28;01melse\u001B[39;00m:\n\u001B[0;32m-> 1511\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_call_impl(\u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs)\n", - "File \u001B[0;32m~/anaconda3/envs/python311/lib/python3.11/site-packages/torch/nn/modules/module.py:1520\u001B[0m, in \u001B[0;36mModule._call_impl\u001B[0;34m(self, *args, **kwargs)\u001B[0m\n\u001B[1;32m 1515\u001B[0m \u001B[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001B[39;00m\n\u001B[1;32m 1516\u001B[0m \u001B[38;5;66;03m# this function, and just call forward.\u001B[39;00m\n\u001B[1;32m 1517\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m (\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_backward_hooks \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_backward_pre_hooks \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_forward_hooks \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_forward_pre_hooks\n\u001B[1;32m 1518\u001B[0m \u001B[38;5;129;01mor\u001B[39;00m _global_backward_pre_hooks \u001B[38;5;129;01mor\u001B[39;00m _global_backward_hooks\n\u001B[1;32m 1519\u001B[0m \u001B[38;5;129;01mor\u001B[39;00m _global_forward_hooks \u001B[38;5;129;01mor\u001B[39;00m _global_forward_pre_hooks):\n\u001B[0;32m-> 1520\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m forward_call(\u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs)\n\u001B[1;32m 1522\u001B[0m \u001B[38;5;28;01mtry\u001B[39;00m:\n\u001B[1;32m 1523\u001B[0m result \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;01mNone\u001B[39;00m\n", - "File \u001B[0;32m~/anaconda3/envs/python311/lib/python3.11/site-packages/torch/nn/modules/conv.py:460\u001B[0m, in \u001B[0;36mConv2d.forward\u001B[0;34m(self, input)\u001B[0m\n\u001B[1;32m 459\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m \u001B[38;5;21mforward\u001B[39m(\u001B[38;5;28mself\u001B[39m, \u001B[38;5;28minput\u001B[39m: Tensor) \u001B[38;5;241m-\u001B[39m\u001B[38;5;241m>\u001B[39m Tensor:\n\u001B[0;32m--> 460\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_conv_forward(\u001B[38;5;28minput\u001B[39m, \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mweight, \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mbias)\n", - "File \u001B[0;32m~/anaconda3/envs/python311/lib/python3.11/site-packages/torch/nn/modules/conv.py:456\u001B[0m, in \u001B[0;36mConv2d._conv_forward\u001B[0;34m(self, input, weight, bias)\u001B[0m\n\u001B[1;32m 452\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mpadding_mode \u001B[38;5;241m!=\u001B[39m \u001B[38;5;124m'\u001B[39m\u001B[38;5;124mzeros\u001B[39m\u001B[38;5;124m'\u001B[39m:\n\u001B[1;32m 453\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m F\u001B[38;5;241m.\u001B[39mconv2d(F\u001B[38;5;241m.\u001B[39mpad(\u001B[38;5;28minput\u001B[39m, \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_reversed_padding_repeated_twice, mode\u001B[38;5;241m=\u001B[39m\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mpadding_mode),\n\u001B[1;32m 454\u001B[0m weight, bias, \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mstride,\n\u001B[1;32m 455\u001B[0m _pair(\u001B[38;5;241m0\u001B[39m), \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mdilation, \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mgroups)\n\u001B[0;32m--> 456\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m F\u001B[38;5;241m.\u001B[39mconv2d(\u001B[38;5;28minput\u001B[39m, weight, bias, \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mstride,\n\u001B[1;32m 457\u001B[0m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mpadding, \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mdilation, \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mgroups)\n", - "\u001B[0;31mRuntimeError\u001B[0m: Given groups=1, weight of size [256, 64, 1, 1], expected input[2, 256, 56, 56] to have 64 channels, but got 256 channels instead" - ] - } - ], - "execution_count": 60 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-08T14:15:44.926764925Z", - "start_time": "2024-11-08T13:45:06.255155Z" - } - }, - "cell_type": "code", - "source": [ - "DATASET_NAME = \"../../datasets/10kds\"\n", - "DATASET_SIZE = 1\n", - "BATCH_SIZE = 1\n", - "directory_path = f\"{DATASET_NAME}/\"\n", - "paths = read_paths_images(directory_path, DATASET_SIZE)\n", - "batches = [paths[i:i + BATCH_SIZE] for i in range(0, len(paths), BATCH_SIZE)]\n", - "\n", - "for i, batch in enumerate(batches):\n", - " images_data = load_images(batch)\n", - " normalized_batch = transform(images_data)\n", - "\n", - " result_batch = inference(model, normalized_batch)\n", - " for url, result in zip(batch, result_batch):\n", - " print(f'{url} {result}')\n", - "\n", - " result_batch, times_parts = inference_mult_models(parts, normalized_batch)\n", - " for url, result in zip(batch, result_batch):\n", - " print(f'{url} {result}')\n" - ], - "id": "7085e32a8e9bdc00", - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "../../datasets/10kds/b5391b2ee1de4a42b58612e48bc4ec67 {'prob': 0.0003826784377451986, 'label': 'on'}\n", - "../../datasets/10kds/b5391b2ee1de4a42b58612e48bc4ec67 {'prob': 0.0003826784377451986, 'label': 'on'}\n" - ] - } - ], - "execution_count": 9 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-08T14:15:44.926856909Z", - "start_time": "2024-11-08T13:45:06.428522Z" - } - }, - "cell_type": "code", - "source": [ - "# Save each part\n", - "for i, part in enumerate(parts):\n", - " torch.save(part, f'models/parts/{i}.pth')\n" - ], - "id": "e6c7c597945deea2", - "outputs": [], - "execution_count": 10 - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-08T14:15:44.926926815Z", - "start_time": "2024-11-08T13:45:06.701748Z" - } - }, - "cell_type": "code", - "source": [ - "# Plot times_parts\n", - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "\n", - "# Compute cumulative start positions\n", - "cumulative_times = np.cumsum(times_parts)\n", - "\n", - "# Plotting\n", - "fig, ax = plt.subplots(figsize=(20, 2))\n", - "ax.barh(['Model Execution'], width=times_parts, left=np.insert(cumulative_times[:-1], 0, 0), color=\"skyblue\", edgecolor=\"grey\")\n", - "\n", - "# Add layer labels\n", - "for i, (label, time, start) in enumerate(zip(names, times_parts, np.insert(cumulative_times[:-1], 0, 0))):\n", - " ax.text(start + time / 2, 0, label, ha='center', va='center', rotation=90, fontsize=8)\n", - "\n", - "# Labeling\n", - "ax.set_xlabel(\"Time (seconds)\")\n", - "ax.set_title(\"Cumulative Execution Time per Layer\")\n", - "\n", - "# Adjust layout\n", - "plt.tight_layout()\n", - "plt.show()\n" - ], - "id": "d40a414c7ee8c45", - "outputs": [ - { - "data": { - "text/plain": [ - "
" - ], - "image/png": "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zMZMxos1zz3M1vBYA8pLOF/1j5lLx8ykYV6UWzi3cob5ScO8pGNm0jAvaZgXfeo4R/Mm1i3vOLdnM8TEeIixERDuPoIgN3/vXQHlW3VW1xMABIX1/7/PQn1VL20++D4ZBhfGiYiIiIiIiIiIiIiIiMhkDFy+G8rQ+0i9dgTmPp34hwwmggvjRERERERERERERERERGSSbp70Q9DNawCAUnUboUKTNgYeEeUWLowTERERERERERERERERkck5efIk7j19iWrtukEQBJxctQivgu+j8YAxhh4a5QIujBMRERERERERERERERGRyQkMDMTXaw7C0qUoAKBGhx5Y2vtzLowbKZmhB0BEREREREREREREREREZAgWllb//97KGiJEA46GchPvGCciIiIiIiIiIiIiIiIik1O4cGFsnzUeNTsPAABc3rMR7uWrGnhUlFu4ME5EREREREREREREREREJqdly5b499FL7F84GQDgWcsHjQfyMerGigvjRERERERERERERERERGRyLCws0GLQGMgcnA09FNIDLowTERERERERERERERERkclJSkrCwUUz8PDaRQBAqTqN0Hz4j1BY2xh4ZJQbZIYeABERERERERERERERERGRvu3fvx8qZSq6zf0L3eethEqlwu7Z3xl6WJRLeMc4ffJWDGoPMSkBYsxbyHYfBOTm6vfEpHj0/rKtAUdHREREREREREREREREedHLly8x8tct6kept584D9N9vbBj6kiIcdFQvXkGAJDZn4EqKhwA0NGnk9a+dkwZAQgCAECMCocq6rXG+4MGDcqt06As4h3j9Mlr0HMo6rfvCldXVwBA9XbdUL19dwgyGQqXLG3g0REREREREREREREREVFepFKpkBQfp36dFB8LuUKBwmUrw0wux9OnT+Ho6AjHgq549uwZ5PLM7zkuXK5K2n7mFgh9eBeOjo7Inz//R/cj/WEV6JNXpkEzKEPv4/iqXzF4zUGYF0hbIK/4WVv82fMzoAoXx4mIiIiIiIiIiIiIiEiaKlWqYNmwLqjU8isAwM0je9Cg51DU6dwfy/ZuxoABA2BpaQkzr+qoUbIwNm3alGlfdTr3BwD82b8NBk3/BeahtwAANWvW/OB+pD9cGKc8IyEhAQIE9WtBkCEhNsaAIyIiIiIiIiIiIiIiIqK8ql69enBr8hUe3b4OAGg5aipK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jFOm+vbtC1tbW0MPQy01NRVyecYp+357ZtsYyqc2Hsp9rHnuYbaGxxpQXsL5qn/MXDpmJg3zotzCuZUzzE8a5iUdM5OGeUnDvOhTxzmaN7FueUvp0qVRtWpVNG/eHOPHj0dYWBiWLFkCHx8fAGn1BAC5XK7xfVa82x4A7OzsuCj+CeAd45SBlL+sICIiIiIiIiIiIiIiIiIyBN4xTkRERERERERERERERESkxfTp0z/4/uTJk/U0EtInLoxTBu8eIhAdHW3gkRARERERERERERERERHpVnh4OADg+fPnOHXqFFq2bAlBEHDw4EH4+vpyjSwPeVerrDwknY9SpwwePXqEkiVLGnoYREREREREREREREREREQfFRoaiiJFinxwG94xThnkz58fAPDkyRPY29sbeDRElJuio6Ph7u6O0NDQj372BhHlXbzWiUwHr3ci08Brnch08HonMg281okMp3bt2rhw4cJH23SF17vuiaKImJgYuLm5fXRbLoxTBjKZDABgb2/Pi5LIRNjZ2fF6JzIBvNaJTAevdyLTwGudyHTweicyDbzWifSvaNGiWLBgAQYMGAAAWLlyJYoVK5br1yKvd93K6o2+slweBxERERERERERERERERHRJ2fNmjW4c+cOqlSpgqpVq+LmzZvo1auXoYdFuYQL40RERERERERERERERERkclxcXLBt2zacPXsWffv2xdmzZ7FgwQJDD4tyCR+lThkoFApMmTIFCoXC0EMholzG653INPBaJzIdvN6JTAOvdSLTweudyDTwWicyjPj4eGzduhUrV67Eo0ePkJCQgPPnz6NMmTK5dkxe74YliKIoGnoQRERERERERERERERERET6MHDgQOzcuRM+Pj7o168fWrZsCS8vLwQHBxt6aJSLeMc4EREREREREREREREREZmMLVu2oHr16hg8eDCaN28OQRAgCIKhh0W5jJ8xTkREREREREREREREREQm48WLF+jRowemT5+OYsWK4ccff0RKSoqhh0W5jAvjRERERERERERERERERGQybGxs0L9/f5w7dw5+fn5ITExEcnIy6tatiyVLlhh6eJRLuDBuhP744w8UL14clpaWqFWrFi5duvTB7bdv344yZcrA0tISFStWxIEDBzTeF0URkydPhqurK6ysrNC0aVM8ePBAY5u3b9+ie/fusLOzg4ODA/r3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eOPGDbFdu3aih4eHmJCQoN6mRYsWYtWqVcWLFy+KZ86cEb28vMSuXbvq78SJTJAhrvdz586Jv/zyixgQECAGBQWJGzZsEJ2dncVevXrp9+SJTEhuXOtv3rwRr127Ju7fv18EIG7ZskW8du2a+OLFC/U2Q4YMEYsWLSoeP35c9Pf3F+vUqSPWqVNHfydOZIIMcb0/fPhQnD59uujv7y8GBweLe/bsEUuUKCH6+Pjo9+SJTIiur/Xk5GSxbdu2YpEiRcSAgADxxYsX6q+kpCR1P/y9nUj/DHG98/d2IsPQ9fUeGxsrTpw4UTx//rwYEhIi+vv7i3379hUVCoV469YtdT/8+U6kX4a41vmzXbe4MG6EFi9eLBYtWlS0sLAQa9asKV64cEH9nq+vr9i7d2+N7bdt2yaWKlVKtLCwEMuXLy/u379f432VSiVOmjRJLFSokKhQKMQmTZqI9+7d09jmzZs3YteuXUUbGxvRzs5O7Nu3rxgTE5Nr50hEafR9vV+5ckWsVauWaG9vL1paWoply5YVZ82aJSYmJubqeRKZOl1f66tXrxYBZPiaMmWKepuEhARx6NChoqOjo5gvXz6xQ4cOGgvnRJQ79H29P3nyRPTx8RHz588vKhQK0dPTUxw3bpwYFRWV26dKZNJ0ea0HBwdrvc4BiCdOnFBvx9/biQxD39c7f28nMhxdXu8JCQlihw4dRDc3N9HCwkJ0dXUV27ZtK166dEmjD/58J9I/fV/r/NmuW4IoiqL+7k8nIiIiIiIiIiIiIiIiIiLSL37GOBERERERERERERERERERGTUujBMRERERERERERERERERkVHjwjgRERERERERERERERERERk1LowTEREREREREREREREREZFR48I4EREREREREREREREREREZNS6MExERERERERERERERERGRUePCOBERERERERERERERERERGTUujBMRERERERERERERERERkVHjwjgRERERERFRHtWnTx+0b9/eYMfv2bMnZs2aZbDj68KaNWvg4OCQpW39/PxQpUoVqFSq3B0UERERERER6RwXxomIiIiIiIg+QYIgfPBr6tSpWLRoEdasWWOQ8V2/fh0HDhzAyJEjDXJ8Q2jRogXMzc2xceNGQw+FiIiIiIiIJJIbegBERERERERElNGLFy/U32/duhWTJ0/GvXv31G02NjawsbExxNAAAIsXL0bHjh0NOgZD6NOnD3777Tf07NnT0EMhIiIiIiIiCXjHOBEREREREdEnyMXFRf1lb28PQRA02mxsbDI8Sr1hw4YYMWIERo0aBUdHRxQqVAgrVqxAXFwc+vbtC1tbW3h6euLgwYMax7p16xZatmwJGxsbFCpUCD179kR4eHimY1MqldixYwfatGmj0b5kyRJ4eXnB0tIShQoVwldffaV+T6VSYfbs2fDw8ICVlRUqV66MHTt2aOx/+/ZttG7dGnZ2drC1tUWDBg0QFBSk3n/69OkoUqQIFAoFqlSpAj8/P/W+ISEhEAQBO3fuRKNGjZAvXz5UrlwZ58+f1zjGmjVrULRoUeTLlw8dOnTAmzdvNN6/fv06GjVqBFtbW9jZ2cHb2xv+/v7q99u0aQN/f3/1uIiIiIiIiChv4MI4ERERERERkRFZu3YtnJyccOnSJYwYMQJff/01OnbsiLp16+Lq1ato1qwZevbsifj4eABAZGQkGjdujKpVq8Lf3x9+fn54+fIlOnXqlOkxbty4gaioKFSvXl3d5u/vj5EjR2L69Om4d+8e/Pz84OPjo35/9uzZWLduHZYtW4bbt29j9OjR6NGjB06dOgUAePbsGXx8fKBQKHD8+HFcuXIF/fr1Q2pqKgBg0aJFWLBgAebPn48bN26gefPmaNu2LR48eKAxth9++AFjx45FQEAASpUqha5du6r7uHjxIvr374/hw4cjICAAjRo1wsyZMzX27969O4oUKYLLly/jypUrmDBhAszNzdXvFy1aFIUKFcK///6bnfIQERERERGRgQiiKIqGHgQRERERERERZW7NmjUYNWoUIiMjNdr79OmDyMhI7N69G0DaHeNKpVK9aKtUKmFvb48vvvgC69atAwCEhYXB1dUV58+fR+3atTFz5kz8+++/OHTokLrfp0+fwt3dHffu3UOpUqUyjGf37t346quvkJKSAkEQAAA7d+5E37598fTpU9ja2mpsn5SUhPz58+Po0aOoU6eOun3AgAGIj4/Hpk2b8P3332PLli24d++exkL0O4ULF8awYcPw/fffq9tq1qyJGjVq4I8//kBISAg8PDzw119/oX///gCAwMBAlC9fHnfu3EGZMmXQrVs3REVFYf/+/eo+unTpAj8/P3W2dnZ2WLx4MXr37p1pPapVq4Z27dphypQpmW5DREREREREnxbeMU5ERERERERkRCpVqqT+3szMDAUKFEDFihXVbYUKFQIAvHr1CkDao8NPnDih/sxyGxsblClTBgAyfVx4QkICFAqFelEcAD777DMUK1YMJUqUQM+ePbFx40b1XekPHz5EfHw8PvvsM43jrFu3Tn2MgIAANGjQQOuieHR0NJ4/f4569epptNerVw937tzJ9PxdXV01zvXOnTuoVauWxvbvL9QDwLfffosBAwagadOmmDNnjtYMrKys1OdGREREREREeYPc0AMgIiIiIiIiIt1Jv7AsCIJG27vFbJVKBQCIjY1FmzZtMHfu3Ax9vVtYTs/JyQnx8fFITk6GhYUFAMDW1hZXr17FyZMncfjwYUyePBlTp07F5cuXERsbCwDYv38/ChcurNGXQqEAkLbYrAsfOtesmDp1Krp164b9+/fj4MGDmDJlCrZs2YIOHTqot3n79i2cnZ11Ml4iIiIiIiLSD94xTkRERERERGTCqlWrhtu3b6N48eLw9PTU+LK2tta6T5UqVQCkPar8fXK5HE2bNsW8efNw48YNhISE4Pjx4yhXrhwUCgWePHmS4Rju7u4A0u70/vfff5GSkpLheHZ2dnBzc8PZs2c12s+ePYty5cpl+VzLli2LixcvarRduHAhw3alSpXC6NGjcfjwYXzxxRdYvXq1+r3ExEQEBQWhatWqWT4uERERERERGR4XxomIiIiIiIhM2LBhw/D27Vt07doVly9fRlBQEA4dOoS+fftCqVRq3cfZ2RnVqlXDmTNn1G379u3Db7/9hoCAADx+/Bjr1q2DSqVC6dKlYWtri7Fjx2L06NFYu3YtgoKCcPXqVSxevBhr164FAAwfPhzR0dHo0qUL/P398eDBA6xfvx737t0DAIwbNw5z587F1q1bce/ePUyYMAEBAQH45ptvsnyuI0eOhJ+fH+bPn48HDx7g999/h5+fn/r9hIQEDB8+HCdPnsTjx49x9uxZXL58GWXLllVvc+HCBSgUigyPYCciIiIiIqJPGxfGiYiIiIiIiEzYuzuxlUolmjVrhooVK2LUqFFwcHCATJb5fzYYMGAANm7cqH7t4OCAnTt3onHjxihbtiyWLVuGzZs3o3z58gCAGTNmYNKkSZg9ezbKli2LFi1aYP/+/fDw8AAAFChQAMePH0dsbCx8fX3h7e2NFStWqB+NPnLkSHz77bcYM2YMKlasCD8/P/zzzz/w8vLK8rnWrl0bK1aswKJFi1C5cmUcPnwYP/74o/p9MzMzvHnzBr169UKpUqXQqVMntGzZEtOmTVNvs3nzZnTv3h358uXL8nGJiIiIiIjI8ARRFEVDD4KIiIiIiIiI8paEhASULl0aW7duNZm7p8PDw1G6dGn4+/urF/SJiIiIiIgob+Ad40REREREREQkmZWVFdatW4fw8HBDD0VvQkJCsGTJEi6KExERERER5UG8Y5yIiIiIiIiIiIiIiIiIiIwa7xgnIiIiIiIiIiIiIiIiIiKjxoVxIiIiIiIiIiIiIiIiIiIyalwYJyIiIiIiIiIiIiIiIiIio8aFcSIiIiIiIiIiIiIiIiIiMmpcGCciIiIiIiIiIiIiIiIiIqPGhXEiIiIiIiIiIiIiIiIiIjJqXBgnIiIiIiIiIiIiIiIiIiKjxoVxIiIiIiIiIiIiIiIiIiIyalwYJyIiIiIiIiIiIiIiIiIio8aFcSIiIiIiIiIiIiIiIiIiMmr/A/xgmoybPPLjAAAAAElFTkSuQmCC" - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "execution_count": 11 - }, - { - "metadata": {}, - "cell_type": "markdown", - "source": "Each Bottleneck has 3-4 convolution layers (conv2d)", - "id": "c3703f49cbc25701" - }, - { - "metadata": { - "ExecuteTime": { - "end_time": "2024-11-08T14:15:44.927042098Z", - "start_time": "2024-11-08T13:45:06.814585Z" - } - }, - "cell_type": "code", - "source": "", - "id": "caa41ea183b86829", - "outputs": [], - "execution_count": null - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 2 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.6" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -}