How do train it?

25 views
Skip to first unread message

dlc

unread,
Jan 18, 2008, 1:50:55 PM1/18/08
to CogniMem-Users
I've read through the documentation, and I think that I have a clue
here, but I'd like to see a procedure and example on how to teach a
network and test it.

I am a Macintosh person so I won't be using the GUI that comes in the
info disk for the camera experimenter board, I have the single chip
board with no camera.

Can someone who has used the CM-1K board spell out the training
procedure and how to get real-time outputs from the device?

Can someone give the procedure for dumping/loading the training
session?

Many Thanks,
DLC
--
Dennis Clark
TTT Enterprises

Dave

unread,
Jan 20, 2008, 12:41:32 PM1/20/08
to CogniMem-Users
Dennis,

Lots to learn on this part. I hope I can help a little, from what I've
gathered so far.

It seems the first step in training would be to decide with method to
use.
1) Programmatically, via the I2C interface
In this method, the data is written to the CM_COMP register, with the
last data written to CM_LCOMP. Next the CM_CAT register is written
with the Category and a neuron is committed. This sequence is detailed
in the CogniMem_SDK.pdf file under "Learn a vector received through
neural network data bus".

2) Realtime, via the V input signals
Using this method, either a video signal or a general digital signal
is presented on the V_Data bus. Using V_En, V_FV, V_LV and V_Clk, the
data is sent into a neuron. The schematics on page 20 of the
CM1K_datasheet.pdf file shows typical ways of connecting these
signals. After this data is clocked in, the category to learn is
written into the CM_CAT register (via I2C). This sequence is detailed
in the CogniMem_SDK.pdf file under "Learn a vector received through
digital input bus". So his method appears to need some synchronization
between the input data and your I2C controller.

Recognizing a vector can be done in 2 methods as well, similar to
learning. Either programmatically, via the I2C, or by presenting data
on the V signals (digital input bus). The CogniMem_SDK.pdf file shows
the sequence for these operations as well. See both "Recognize a
vector received through neural network data bus" and "Recognize a
vector received through the digital input bus"

As for dumping/loading the training session, there doesn't appear to
be a lot of data on how this is done. The CogniMem_SDK.pdf doc
indicates to simply call the CM_SaveCKF function. Looking at the
registers, it seems the chip has two modes, LR (Learning/Recognition)
and SR (Save/Restore). It seems the chip needs to be put in SR mode,
and I2C registers read. Anyone have any more info on this?

Also, I see the Windows applications appear to be written in Visual
Basic 6.0. It sure would be helpful to have the source code for these,
especially CM_EB Dignostics, and Easy_Video_Trainer. Then it would be
much easier to understand how to load the .dlls and call the
functions. Can someone from Recognetics provide this?

Dennis, BTW, what type of data are you going to input for training?

Thanks,
Dave

dlc

unread,
Jan 20, 2008, 4:26:22 PM1/20/08
to Cogn...@googlegroups.com
Thanks Dave,

I didn't think to look in the SDK PDF's since I will never be using
their SDK, I don't use a Windows machine. But that helps to see what is
going on, I'll read through that more carefully. The other
documentation only speaks in general terms and while the IO lines are
defined, their function is a bit hazy to me.

I will be using SONAR or IR range finding value sets and IMU data for
balancing.

regards,
DLC

--
-------------------------------------------------
Dennis Clark TTT Enterprises
www.techtoystoday.com
-------------------------------------------------

an...@general-vision.com

unread,
Jan 29, 2008, 5:04:29 PM1/29/08
to CogniMem-Users
The Simple Example supplied in the CogniMem SDK is a good start to
understand the learn/reco instructions, but indeed cannot be very
helpful if you do not have VB6 nor even a Windows-based system. I just
posted the printout of the source code on this newsgroup. Hope it
helps.

PS: the best description of the IO lines is indeed in the SDK and also
in the CM_EB_datasheet.

Good luck
Anne
> -------------------------------------------------- Hide quoted text -
>
> - Show quoted text -

Dennis Clark

unread,
Jan 30, 2008, 9:43:24 AM1/30/08
to Cogn...@googlegroups.com
Thanks,

Every little bit helps - I'm a programmer so the idea of training an
neural network is a bit sketchy to me. Let me bounce some ideas off of
those that are more familiar with the concepts. My original concept
idea for using this in a project is a balancing robot (yeah, simple PID
loops and such, not rocket science, but I'm experimenting here...). My
thoughts were that I would feed accelerometer data to the net and train
it using categories that were motor driver inputs (PWM values). The big
puzzler for me is how to decide the proper gain for the feedback loop -
Is this simply empirical trial-and-error? Is there some way to get the
network to come up with its own category data and optimize? Clearly the
desire is to "neutral" the accelerator data (standing upright) for as
long as possible. To get it to do this you (it) would constantly tweak
the response gain to the error signal until you couldn't get any better
(converged on the optimum). The problem that I see with this is that
you need to learn and act at the same time and then throw out what you
learned in the past when better results are achieved. Is the Cognimem
capable of heuristic learning? The speed at which this device reacts is
clearly ideal for a balancing act, way faster than any of my PID loops
would be so I'm excited about that, but the PID loop is an empirical
tuning exercise to optimize kP, kI and kD and I'm wondering if there is
a way to get the Cognimem to do that tweaking itself.

Thanks,
DLC

Anne Menendez

unread,
Jan 30, 2008, 2:27:14 PM1/30/08
to Cogn...@googlegroups.com

I started a new "Active Control" topics on the newsgroup and posted an old
demo which might help.
Good luck
Anne
Reply all
Reply to author
Forward
0 new messages