omz:forum

    • Register
    • Login
    • Search
    • Recent
    • Popular

    Welcome!

    This is the community forum for my apps Pythonista and Editorial.

    For individual support questions, you can also send an email. If you have a very short question or just want to say hello — I'm @olemoritz on Twitter.


    Machine Learning

    Pythonista
    neural network machine learnin
    8
    68
    36426
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • jmv38
      jmv38 last edited by

      @mkeywood i have tried to add some robustness: i shift the drawings in 9 position for the training. I had to decrease the learning rate by x0.1. Is it ok? what do you think?
      Not sure the performance is better.

      note: I also changed the layout because i work in landscape.

      https://gist.github.com/d87a0833a64f0128a12c59547984ad2f

      1 Reply Last reply Reply Quote 0
      • jmv38
        jmv38 last edited by

        I have changed the learning rate to 0.02 and increased the number of training epochs to 200: i am getting good results now.

        1 Reply Last reply Reply Quote 0
        • jmv38
          jmv38 last edited by jmv38

          @mkeywood really having fun with your code, thanks so much for sharing!
          Now i made some more changes: using 2 neurons in the output, to get independant estimates and reliability (and also to see the result with a 3rd template that is not 1 or 2).
          I have also added a small rotation in the training, and tweeked a little bit the training parameters.
          https://gist.github.com/e373904d3ccba03803d80173f44b5eee

          1 Reply Last reply Reply Quote 0
          • jmv38
            jmv38 last edited by jmv38

            @mkeywood
            update: i have made a Layer class to more easily add layers. I have now 4 layers. It seems to work, but i have not checked if the undeground maths are correct. I’ve assumed your formula to backpropagate the error is recursive.
            With this implementation you can use the number of layers you want, with the number of neurons you want inside.

            https://gist.github.com/aea7738590793eefcd786be8657fa88b

            mkeywood 1 Reply Last reply Reply Quote 0
            • mkeywood
              mkeywood @jmv38 last edited by

              @jmv38 this is awesome!!

              Glad it was helpful, but you've taken it to another level completely 😀
              That's some really great additions. Really amazing. I look forward to see what you do next 😀

              Thanks 😀

              jmv38 1 Reply Last reply Reply Quote 0
              • jmv38
                jmv38 @mkeywood last edited by

                @mkeywood here is an update:
                https://gist.github.com/3c9f5917224d8a70ea319af1df973c73

                i have made 3 inputs, many duplicates, and some live feedback during learning. Works not bad sometimes.

                1 Reply Last reply Reply Quote 0
                • jmv38
                  jmv38 last edited by

                  another one: now i display the learning set while creating it
                  https://gist.github.com/549d071893cac00e84fcd1875d422d1a

                  1 Reply Last reply Reply Quote 0
                  • jmv38
                    jmv38 last edited by

                    hello
                    v08: added a white image and a random image should return 0: to improve robustness
                    https://gist.github.com/d21c832208f33fe083b9200b29e1f073

                    Matteo 1 Reply Last reply Reply Quote 1
                    • Matteo
                      Matteo @jmv38 last edited by

                      @jmv38 Hi interesting project! I'd like to ask you two things about it:

                      1. could you easly modify your script in order to allow execution also on little screens (4 in)? Does anyone here (Pythonista forum) know a general way to modify easly a script with UI in order to adapt it automatically according to screen size (through the automatic recognition of the screen size of the device where the script is executed)?
                      2. only for fun, if you are interested: how about a script (by following your original script) that tries to learn to play tic-tac-toe game? For example with random choice of moves at beginning and positive weight to set of moves for winner player in several matches, in order to create a set of moves (getting closer to being the best ones) for each situation? What would you suggest?

                      Thank you and feel free to share some reasoning about it.
                      Regards

                      jmv38 1 Reply Last reply Reply Quote 0
                      • jmv38
                        jmv38 @Matteo last edited by jmv38

                        @Matteo hello.
                        Note that mkeywood made the original programm and ui layout. I just made a set of small changes each time that lead me here.
                        For you questions:
                        1/ the ui part is at the bottom of the script. You can change the numbers and the layout to match your screen definition. That is some work though (1 hour or less).
                        2/ that would be quite some thinking to do that. For the moment i am just doing simple things to learn python, by tweaking mkeywood programm, so it is beyond me.
                        Thanks.

                        Matteo 1 Reply Last reply Reply Quote 0
                        • Matteo
                          Matteo @jmv38 last edited by

                          @jmv38 Oops, you are right , my mistake, sorry @mkeywood :-), I didn't read the whole thread...

                          Anyway thank you for the answer. Some times ago I started for fun to study something about ML, and the first test example in my mind was an algorithm able to learn how to play a simple game like tictactoe, without studying any python specific library for ML.

                          The interesting thing in my opinion is how to create a general algorithm able to learn something without any big python libraries, only as a concept proof and with some little constraints defined by user for the research of the Ml goal/goals. The constraints could change in the algorithm when some situations occur during calculation. So thank you again both for your work, maybe it could give me some technical info for the ML game solver I've in mind.

                          Regards

                          1 Reply Last reply Reply Quote 0
                          • jmv38
                            jmv38 last edited by jmv38

                            v09:
                            1/ cleaned up some code
                            2/ live color feedback during training on samples
                            https://gist.github.com/89684d9166746504bba88348240e26ff

                            1 Reply Last reply Reply Quote 0
                            • jmv38
                              jmv38 last edited by

                              v10: 1/ added a [learn more] button to ... learn more.
                              https://gist.github.com/f7fc75b727c953e4dbb59c04f88acf74

                              1 Reply Last reply Reply Quote 0
                              • mkeywood
                                mkeywood last edited by

                                @jmv38, looks like some great updates. I look forward to looking over them this weekend :)

                                @Matteo, no problem at all. @jmv38 has built on it massively from what I did. Really this is here for anyone to enjoy.

                                Thanks

                                1 Reply Last reply Reply Quote 0
                                • jmv38
                                  jmv38 last edited by jmv38

                                  Please help wanted!
                                  I am stuck on a bug and i cant find what i am doing wrong.
                                  here is the gist https://gist.github.com/3af5cf10e59944648ee38d3628282324
                                  it runs fine. But i have tried to move a small piece of code to a class and then i crash all the time. no idea what is wrong.
                                  To see the bug happen, replace False by True in this line 294

                                      testBug = False # set True to show the bug
                                  

                                  with False i directly execute the code, with True i use the piece embedded in the SketchView class.
                                  the problem seems to appear when i ask the SketchView instance to remember an image: line 230

                                  self.sImage = pil_image
                                  

                                  can anyone help me?
                                  thanks

                                  mikael 1 Reply Last reply Reply Quote 0
                                  • mikael
                                    mikael @jmv38 last edited by

                                    @jmv38, if Pythonista crashes, google for ”dgelessus faulthandler” to get the ObjC exception. If it is not a Pythonista crash, what is the trace?

                                    1 Reply Last reply Reply Quote 0
                                    • jmv38
                                      jmv38 last edited by jmv38

                                      it is a pythonista crash

                                      1 Reply Last reply Reply Quote 0
                                      • jmv38
                                        jmv38 last edited by jmv38

                                        note that the images stored are very small (25x25) and only 3 SketchView objects are using them. So it cannot be memory overflow.
                                        I am probably doing something very wrong somewhere, but what?
                                        What is puzzling is that the very same code, executed 200 times works fine. I try to execute it only 3 times, and re-use the result, but then it does not work...
                                        Note that it works the 1rst time. This code never crashes

                                          def run(self):
                                            global X, y, pts, NN
                                            n = len(self.vars)
                                            count = self.count
                                            if count<n:
                                              if count == 3: exit()
                                        

                                        the crash occurs ramdomly during one of the next calls. Not always the same. I must be writing in the memory at a wrong place.

                                        cvp 1 Reply Last reply Reply Quote 0
                                        • cvp
                                          cvp last edited by

                                          Crash, with faulthandler, gives an empty faultlog-temp.txt...strange

                                          1 Reply Last reply Reply Quote 0
                                          • cvp
                                            cvp @jmv38 last edited by

                                            @jmv38 Not sure if that helps but no crash with

                                              def getImg(self):
                                                if self.sImage == None:
                                                  pil_image = ui2pil(snapshot(self.subviews[0]))
                                                  _,_,_,pil_image = pil_image.split()
                                                  pil_image = pil_image.resize((100, 100),PILImage.BILINEAR)
                                                  pil_image = pil_image.resize((50, 50),PILImage.BILINEAR)
                                                  pil_image = pil_image.resize((25, 25),PILImage.BILINEAR)
                                                  return pil_image.copy() <-------------------
                                                  self.sImage = pil_image
                                                return self.sImage.copy()
                                            
                                            jmv38 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post
                                            Powered by NodeBB Forums | Contributors