Exemplo n.º 1
0
 def __init__(self):
     super(SIREnv, self).__init__()
     self.Nm = str()
     self.SetTags("Nm", 'desc:"name of this environment"')
     self.Dsc = str()
     self.SetTags("Dsc", 'desc:"description of this environment"')
     self.NStim = int(4)
     self.SetTags("NStim", 'desc:"number of different stimuli that can be maintained"')
     self.RewVal = float(1)
     self.SetTags("RewVal", 'desc:"value for reward, based on whether model output = target"')
     self.NoRewVal = float(0)
     self.SetTags("NoRewVal", 'desc:"value for non-reward"')
     self.Act = Actions.Store
     self.SetTags("Act", 'desc:"current action"')
     self.Stim = int()
     self.SetTags("Stim", 'desc:"current stimulus"')
     self.Maint = int()
     self.SetTags("Maint", 'desc:"current stimulus being maintained"')
     self.Input = etensor.Float64()
     self.SetTags("Input", 'desc:"input pattern with action + stim"')
     self.Output = etensor.Float64()
     self.SetTags("Output", 'desc:"output pattern of what to respond"')
     self.Reward = etensor.Float64()
     self.SetTags("Reward", 'desc:"reward value"')
     self.Run = env.Ctr()
     self.SetTags("Run", 'view:"inline" desc:"current run of model as provided during Init"')
     self.Epoch = env.Ctr()
     self.SetTags("Epoch", 'view:"inline" desc:"number of times through Seq.Max number of sequences"')
     self.Trial = env.Ctr()
     self.SetTags("Trial", 'view:"inline" desc:"trial is the step counter within epoch"')
Exemplo n.º 2
0
    def LogTstQuiz(ss, dt):
        trl = ss.TstTrlLog
        epc = ss.TrainEnv.Epoch.Prv # ?

        nper = 4 # number of paras per quiz question: Q, A, B, C
        nt = trl.Rows
        nq = int(nt / nper)
        pctcor = 0.0
        srow = dt.Rows
        dt.SetNumRows(srow + nq + 1)
        for qi in range(nq):
            ri = nper * qi
            qv = etensor.Float64(trl.CellTensor("Hidden", ri))
            mxai = 0
            mxcor = 0.0
            row = srow + qi
            for ai in range(nper - 1):
                av = etensor.Float64(trl.CellTensor("Hidden", ri+ai+1))
                cor = metric.Correlation64(qv.Values, av.Values)
                if cor > mxcor:
                    mxai = ai
                    mxcor = cor
                dt.SetCellTensorFloat1D("Correls", row, ai, cor)
            ans = go.Slice_string(["A", "B", "C"])[mxai]
            err = 1.0
            if mxai == 0: # A
                pctcor += 1
                err = 0

            # note: this shows how to use agg methods to compute summary data from another
            # data table, instead of incrementing on the Sim
            dt.SetCellFloat("Run", row, float(ss.TrainEnv.Run.Cur))
            dt.SetCellFloat("Epoch", row, float(epc))
            dt.SetCellFloat("QNo", row, float(qi))
            dt.SetCellString("Resp", row, ans)
            dt.SetCellFloat("Err", row, err)
        pctcor /= float(nq)
        row = dt.Rows - 1
        dt.SetCellFloat("Run", row, float(ss.TrainEnv.Run.Cur))
        dt.SetCellFloat("Epoch", row, float(epc))
        dt.SetCellFloat("QNo", row, -1)
        dt.SetCellString("Resp", row, "Total")
        dt.SetCellFloat("Err", row, pctcor)

        ss.TstQuizPctCor = pctcor

        # note: essential to use Go version of update when called from another goroutine
        ss.TstQuizPlot.GoUpdate()
Exemplo n.º 3
0
 def __init__(self):
     super(CondEnv, self).__init__()
     self.Nm = str()
     self.SetTags("Nm", 'desc:"name of this environment"')
     self.Dsc = str()
     self.SetTags("Dsc", 'desc:"description of this environment"')
     self.TotTime = int()
     self.SetTags("TotTime", 'desc:"total time for trial"')
     self.CSA = OnOff()
     self.SetTags(
         "CSA", 'view:"inline" desc:"Conditioned stimulus A (e.g., Tone)"')
     self.CSB = OnOff()
     self.SetTags(
         "CSB", 'view:"inline" desc:"Conditioned stimulus B (e.g., Light)"')
     self.CSC = OnOff()
     self.SetTags("CSC", 'view:"inline" desc:"Conditioned stimulus C"')
     self.US = OnOff()
     self.SetTags("US",
                  'view:"inline" desc:"Unconditioned stimulus -- reward"')
     self.RewVal = float()
     self.SetTags("RewVal", 'desc:"value for reward"')
     self.NoRewVal = float()
     self.SetTags("NoRewVal", 'desc:"value for non-reward"')
     self.Input = etensor.Float64()
     self.SetTags("Input",
                  'desc:"one-hot input representation of current option"')
     self.Reward = etensor.Float64()
     self.SetTags("Reward", 'desc:"single reward value"')
     self.Run = env.Ctr()
     self.SetTags(
         "Run",
         'view:"inline" desc:"current run of model as provided during Init"'
     )
     self.Epoch = env.Ctr()
     self.SetTags(
         "Epoch",
         'view:"inline" desc:"number of times through Seq.Max number of sequences"'
     )
     self.Trial = env.Ctr()
     self.SetTags(
         "Trial",
         'view:"inline" desc:"one trial is a pass through all TotTime Events"'
     )
     self.Event = env.Ctr()
     self.SetTags(
         "Event",
         'view:"inline" desc:"event is one time step within Trial -- e.g., CS turning on, etc"'
     )
Exemplo n.º 4
0
    def LogTstEpc(ss, dt):
        row = dt.Rows
        dt.SetNumRows(row + 1)

        trl = ss.TstTrlLog
        epc = ss.TrainEnv.Epoch.Prv

        wr1 = etensor.Float64(trl.CellTensor("Hidden", 0))
        wr2 = etensor.Float64(trl.CellTensor("Hidden", 1))

        ss.TstWords = ss.WordsLabel()
        ss.TstWordsCorrel = metric.Correlation64(wr1.Values, wr2.Values)

        dt.SetCellFloat("Run", row, float(ss.TrainEnv.Run.Cur))
        dt.SetCellFloat("Epoch", row, float(epc))
        dt.SetCellString("Words", row, ss.TstWords)
        dt.SetCellFloat("TstWordsCorrel", row, ss.TstWordsCorrel)

        ss.TstEpcPlot.GoUpdate()
Exemplo n.º 5
0
 def __init__(self):
     super(BanditEnv, self).__init__()
     self.Nm = str()
     self.SetTags("Nm", 'desc:"name of this environment"')
     self.Dsc = str()
     self.SetTags("Dsc", 'desc:"description of this environment"')
     self.N = int()
     self.SetTags("N", 'desc:"number of different inputs"')
     self.P = []
     self.SetTags("P",
                  'desc:"no-inline" desc:"probabilities for each option"')
     self.RewVal = float(1)
     self.SetTags("RewVal", 'desc:"value for reward"')
     self.NoRewVal = float(-1)
     self.SetTags("NoRewVal", 'desc:"value for non-reward"')
     self.Option = env.CurPrvInt()
     self.SetTags("Option", 'desc:"bandit option current / prev"')
     self.RndOpt = True
     self.SetTags(
         "RndOpt",
         'desc:"if true, select option at random each Step -- otherwise must be set externally (e.g., by model)"'
     )
     self.Input = etensor.Float64()
     self.SetTags("Input",
                  'desc:"one-hot input representation of current option"')
     self.Reward = etensor.Float64()
     self.SetTags("Reward", 'desc:"single reward value"')
     self.Run = env.Ctr()
     self.SetTags(
         "Run",
         'view:"inline" desc:"current run of model as provided during Init"'
     )
     self.Epoch = env.Ctr()
     self.SetTags(
         "Epoch",
         'view:"inline" desc:"number of times through Seq.Max number of sequences"'
     )
     self.Trial = env.Ctr()
     self.SetTags(
         "Trial",
         'view:"inline" desc:"trial is the step counter within epoch"')
Exemplo n.º 6
0
 def UniquePatStat(ss, dt):
     """
     UniquePatStat analyzes the hidden activity patterns for the single-line test inputs
     to determine how many such lines have a distinct hidden pattern, as computed
     from the similarity matrix across patterns
     """
     hc = etensor.Float64(dt.ColByName("Hidden"))
     norm.Binarize64(hc.Values, .5, 1, 0)
     ix = etable.NewIdxView(dt)
     ss.SimMat.TableColStd(ix, "Hidden", "TrialName", False, metric.SumSquares)
     dm = ss.SimMat.Mat
     nrow = dm.Dim(0)
     uniq = 0
     for row in range(nrow):
         tsr = etensor.Float64(dm.SubSpace(go.Slice_int([row])))
         nzero = 0
         for vl in tsr.Values:
             if vl == 0:
                 nzero += 1
         if nzero == 1:
             uniq += 1
     return float(uniq)
Exemplo n.º 7
0
def etensor_to_numpy(et):
    """
    returns a numpy ndarray constructed from the given etensor.Tensor.
    data is copied into the numpy ndarray -- it is not a view.
    """
    nar = 0
    if et.DataType() == etensor.UINT8:
        nar = np.array(etensor.Uint8(et).Values, dtype=np.uint8)
    elif et.DataType() == etensor.INT8:
        nar = np.array(etensor.Int8(et).Values, dtype=np.int8)
    elif et.DataType() == etensor.UINT16:
        nar = np.array(etensor.Uint16(et).Values, dtype=np.uint16)
    elif et.DataType() == etensor.INT16:
        nar = np.array(etensor.Int16(et).Values, dtype=np.int16)
    elif et.DataType() == etensor.UINT32:
        nar = np.array(etensor.Uint32(et).Values, dtype=np.uint32)
    elif et.DataType() == etensor.INT32:
        nar = np.array(etensor.Int32(et).Values, dtype=np.int32)
    elif et.DataType() == etensor.UINT64:
        nar = np.array(etensor.Uint64(et).Values, dtype=np.uint64)
    elif et.DataType() == etensor.INT64:
        nar = np.array(etensor.Int64(et).Values, dtype=np.int64)
    elif et.DataType() == etensor.FLOAT32:
        nar = np.array(etensor.Float32(et).Values, dtype=np.float32)
    elif et.DataType() == etensor.FLOAT64:
        nar = np.array(etensor.Float64(et).Values, dtype=np.float64)
    elif et.DataType() == etensor.STRING:
        nar = np.array(etensor.String(et).Values)
    elif et.DataType() == etensor.INT:
        nar = np.array(etensor.Int(et).Values, dtype=np.intc)
    elif et.DataType() == etensor.BOOL:
        etb = etensor.Bits(et)
        sz = etb.Len()
        nar = np.zeros(sz, dtype=np.bool_)
        for i in range(sz):
            nar[i] = etb.Value1D(i)
    else:
        raise TypeError("tensor with type %s cannot be converted" %
                        (et.DataType().String()))
        return 0
    # there does not appear to be a way to set the shape at the same time as initializing
    return nar.reshape(et.Shapes())
Exemplo n.º 8
0
def copy_numpy_to_etensor(et, nar):
    """
    copies data from numpy ndarray (nar, source) to existing etensor.Tensor (et, dest) 
    """
    narf = np.reshape(nar, -1)
    etv = et
    if et.DataType() == etensor.UINT8:
        etv = etensor.Uint8(et).Values
    elif et.DataType() == etensor.INT8:
        etv = etensor.Int8(et).Values
    elif et.DataType() == etensor.UINT16:
        etv = etensor.Uint16(et).Values
    elif et.DataType() == etensor.INT16:
        etv = etensor.Int16(et).Values
    elif et.DataType() == etensor.UINT32:
        etv = etensor.Uint32(et).Values
    elif et.DataType() == etensor.INT32:
        etv = etensor.Int32(et).Values
    elif et.DataType() == etensor.UINT64:
        etv = etensor.Uint64(et).Values
    elif et.DataType() == etensor.INT64:
        etv = etensor.Int64(et).Values
    elif et.DataType() == etensor.FLOAT32:
        etv = etensor.Float32(et).Values
    elif et.DataType() == etensor.FLOAT64:
        etv = etensor.Float64(et).Values
    elif et.DataType() == etensor.STRING:
        etv = etensor.String(et).Values
    elif et.DataType() == etensor.INT:
        etv = etensor.Int(et).Values
    elif et.DataType() == etensor.BOOL:
        etb = etensor.Bits(et)
        sz = min(etb.Len(), len(narf))
        for i in range(sz):
            narf[i] = etb.Value1D(i)
        return
    else:
        raise TypeError("tensor with type %s cannot be copied" %
                        (et.DataType().String()))
        return 0
    etv.copy(narf)  # go slice copy, not python copy = clone