You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
(require '[libpython-clj2.python :as py])
(require '[libpython-clj2.require :refer [import-python])
(import-python) ;; gives us access to python builtins;; py** has similar syntax to ** in Python, last argument is considered **kwargs;; py.. is similar in syntax to (.. ) syntax in Clojure;; note that python datatypes need to be wrapped when using the helper macros,;; that's why I'm employing (python/list [1]) instead of a Clojure vector of [1]
(defoutputs (py/py** model :labels (py/py.. torch (LongTensor (python/list [1]))) encoding))
thank you @jjtolton! I tried your example and it still did not work. I think the issue is that :labels is not a method on model.
I was able to invoke it in this cumbersome way:
(libpython-clj2.python.fn/call-kw
model
[]
(py/as-map (py/set-attr! encoding :labels (torch/LongTensor [1]))))
Re: import statements, here's the entire code example
(require-python '[transformers :bind-ns])
(require-python '[torch :bind-ns])
(deftokenizer
(py. (py.- transformers BertTokenizer)
from_pretrained "bert-base-uncased"))
(defmodel
(py. (py.- transformers "BertForNextSentencePrediction") from_pretrained "bert-base-uncased"))
(let [prompt "In Italy, pizza served in formal settings, such as at a restaurant, is presented unsliced."
next-sequence "The sky is blue due to the shorter wavelength of blue light."
encoding (py/$c tokenizer prompt next-sequence :return_tensors"pt")]
(libpython-clj2.python.fn/call-kw
model
[]
(py/as-map (py/set-attr! encoding :labels (torch/LongTensor [1])))))
Ahhh that's a tricky situation I did not consider. model is a raw python object with a dynamic __call__ method, which the py/py{*} macros do not account for. The user experience with the low level code you used could be improved upon by making some friendly and more idiomatic APIs. When I get time I'll
make a PR to make this a better experience. Thanks for digging this up and I'm glad you found a solution.
Activity
[-]How to `**` and object into kwargs[/-][+]How to `**` apply an object as kwargs[/+]jjtolton commentedon Jul 26, 2022
jjtolton commentedon Jul 26, 2022
If you put in the Python import statements you used I can show you how to translate them as well. I omitted them from the above snippet.
den1k commentedon Jul 28, 2022
thank you @jjtolton! I tried your example and it still did not work. I think the issue is that
:labelsis not a method onmodel.I was able to invoke it in this cumbersome way:
Re: import statements, here's the entire code example
jjtolton commentedon Jul 31, 2022
Ahhh that's a tricky situation I did not consider.
modelis a raw python object with a dynamic__call__method, which thepy/py{*}macros do not account for. The user experience with the low level code you used could be improved upon by making some friendly and more idiomatic APIs. When I get time I'llmake a PR to make this a better experience. Thanks for digging this up and I'm glad you found a solution.
jjtolton commentedon Oct 21, 2022
@den1k Looking back on this, the solution is
not sure why I didn't think of that earlier.