Following code stop with
AttributeError: 'builtin_function_or_method' object has no attribute 'code'. Did you mean: 'call'?
(nspytorchlightning.core
(:gen-class)
(:require [libpython-clj2.python :as py
:refer
[ py. py.- as-jvm
set-attr!
get-item
->py-tuple
->py-list
]]
[libpython-clj2.require :refer [require-python]]
))
;;(py/initialize!)
(require-python
'[builtins :as python]
'[torch]
'[torch.nn :as nn :refer [Linear]]
'[torch.nn.functional :refer [mse_loss]]
'[torch.utils.data :refer [DataLoader Dataset]]
'[torch.optim]
'[pytorch_lightning]
)
(defoncemodel (atomnil))
(defLitModel
(py/create-class"LitModel" [pytorch_lightning/LightningModule]
{"__init__"
(py/make-tuple-instance-fn
(fn [self]
(py. pytorch_lightning/LightningModule __init__ self)
(py/set-attr! self "layer" (Linear11))
nil))
"forward"
(py/make-tuple-instance-fn
(fn [self x] (py. self layer x))
:arg-converter as-jvm
:method-name"forward"
)
"training_step"
(py/make-tuple-instance-fn
(fn [self batch batch_idx]
(mse_loss (py/get-item batch 1) (py. self forward (py/get-item batch 0)))
))
"validation_step"
(py/make-tuple-instance-fn
(fn [self batch batch_idx]
(mse_loss (py/get-item batch 1) (py. self forward (py/get-item batch 0)))
))
"test_step"
(py/make-tuple-instance-fn
(fn [self batch batch_idx]
(mse_loss (py/get-item batch 1) (py. self forward (py/get-item batch 0)))
))
"configure_optimizers"
(py/make-tuple-instance-fn
(fn [self]
(torch.optim/SGD
(py. self parameters)
:lr0.02)
))
}))
(defSimpleDataset
(py/create-class"SimpleDataset" [Dataset]
{"__init__"
(py/make-tuple-instance-fn
(fn [self data] (py/set-attr! self "data" data) nil))
"__len__"
(py/make-tuple-instance-fn (fn [self] (python/len (py.- self data))))
"__getitem__"
(py/make-tuple-instance-fn
(fn [self idx]
(py/->py-tuple
[
(torch/tensor [(py/get-item (py/get-item (py.- self data) idx) 0)] :dtype torch/float32)
(torch/tensor [(py/get-item (py/get-item (py.- self data) idx) 1)] :dtype torch/float32)
]
)
))
}))
(defSimpleDataModule
(py/create-class"SimpleDataModule" [pytorch_lightning/LightningDataModule]
{"__init__"
(py/make-tuple-instance-fn
(fn [self data] (py/set-attr! self "data" data) nil))
"train_dataloader"
(py/make-tuple-instance-fn
(fn [self]
(DataLoader (SimpleDataset (py.- self data )) :batch_size2:shufflefalse)))
"val_dataloader"
(py/make-tuple-instance-fn
(fn [self]
(DataLoader (SimpleDataset (py.- self data )) :batch_size2:shufflefalse)))
"test_dataloader"
(py/make-tuple-instance-fn
(fn [self]
(DataLoader (SimpleDataset (py.- self data )) :batch_size2:shufflefalse)))
}))
(defn-main [& args]
(reset! model (LitModel))
(defdata [[1.03.0] [2.05.0] [3.07.0] [4.09.0] [5.011.0]] )
(defdata_pylist (py/->py-list data))
;; (println (py/get-item (py/get-item data_pylist 0) 0))
(deftrain_dataset (SimpleDataset data_pylist))
(deftrain_loader (DataLoader train_dataset :batch_size2:shufflefalse))
;; ;;for debug;; (def train_pylist (python/list train_loader));; (def train_pylist_0 (py/get-item train_pylist 0));; (println (py. @model training_step train_pylist_0 0) );;;OK. maybe this part work
(deftrainer (pytorch_lightning/Trainer:max_epochs10 ))
(defdatamodu (SimpleDataModule data_pylist))
(py. trainer fit @model train_loader)
;;(py. trainer fit @model datamodu) ;;also fail
)
Following code stop with