0

エンコーダーに breznakのコミットを使用(GitHub で "git checkout ..." を理解できなかったので、base.py、multi.py、および multi_test.py の 3 つのファイルを慎重にコピーしました) .

問題なく multi_test.py を実行しました。

次に、「sensorParams」のエンコーダー部分が次のようになるように、モデル パラメーター (MODEL_PARAMS) を調整しました。

'encoders': {
    'frequency': {
         'fieldname': u'frequency',
         'type': 'SimpleVector',
         'length': 5,                    
         'minVal': 0,
         'maxVal': 210
     }
 },

コードの modelInput 部分も調整したので、次のようになりました。

model = ModelFactory.create(model_params.MODEL_PARAMS)
model.enableInference({'predictedField': 'frequency'})
y = [1,2,3,4,5]
modelInput = {"frequency": y}
result = model.run(modelInput)

しかし、「y」をリストとしてインスタンス化するか、numpy.ndarray としてインスタンス化するかに関係なく、最終エラーが発生します

File "nta/eng/lib/python2.7/site-packages/nupic/encoders/base.py", line 183, in _getInputValue
    return getattr(obj, fieldname)
AttributeError: 'list' object has no attribute 'idx0'

また、modelInput とインラインで SimpleVector エンコーダーを初期化し、配列を直接エンコードしてから、modelInput に渡してみました。これは、SimpleVector の入力パラメーターに違反していました。これは、二重エンコードになったためです。そこで、モデル パラメータ ディクショナリのエンコーダ部分を削除しました。私のモデルの一部が辞書のその部分を探していたので、それは吐き気を引き起こしました。

次に何をすべきかについて何か提案はありますか?

編集: OPFで使用しているファイルは次のとおりです。

sendAnArray.py

import numpy
from nupic.frameworks.opf.modelfactory import ModelFactory    
import model_params

class sendAnArray():

def __init__(self):
    self.model = ModelFactory.create(model_params.MODEL_PARAMS)
    self.model.enableInference({'predictedField': 'frequency'})
    for i in range(100):
        self.run()

def run(self):
    y = [1,2,3,4,5]
    modelInput = {"frequency": y}
    result = self.model.run(modelInput)
    anomalyScore = result.inferences['anomalyScore']
    print y, anomalyScore

sAA = sendAnArray()

model_params.py

MODEL_PARAMS = {
    'model': "CLA",
    'version': 1,
    'predictAheadTime': None,
    'modelParams': {
        'inferenceType': 'TemporalAnomaly',
        'sensorParams': {
            'verbosity' : 0,
            'encoders': {
                'frequency': {
                    'fieldname': u'frequency',
                    'type': 'SimpleVector',
                    'length': 5,                    
                    'minVal': 0,
                    'maxVal': 210
                }
            },
            'sensorAutoReset' : None,
        },
        'spEnable': True,
        'spParams': {
            'spVerbosity' : 0,
            'globalInhibition': 1,
            'columnCount': 2048,
            'inputWidth': 5,
            'numActivePerInhArea': 60,
            'seed': 1956,
            'coincInputPoolPct': 0.5,
            'synPermConnected': 0.1,
            'synPermActiveInc': 0.1,
            'synPermInactiveDec': 0.01,
        },
        'tpEnable' : True,
        'tpParams': {
            'verbosity': 0,
            'columnCount': 2048,
            'cellsPerColumn': 32,
            'inputWidth': 2048,
            'seed': 1960,
            'temporalImp': 'cpp',
            'newSynapseCount': 20,
            'maxSynapsesPerSegment': 32,
            'maxSegmentsPerCell': 128,
            'initialPerm': 0.21,
            'permanenceInc': 0.1,
            'permanenceDec' : 0.1,
            'globalDecay': 0.0,
            'maxAge': 0,
            'minThreshold': 12,
            'activationThreshold': 16,
            'outputType': 'normal',
            'pamLength': 1,
        },
        'clParams': {
            'regionName' : 'CLAClassifierRegion',
            'clVerbosity' : 0,
            'alpha': 0.0001,
            'steps': '5',
        },
        'anomalyParams': {  
            u'anomalyCacheRecords': None,
            u'autoDetectThreshold': None,
            u'autoDetectWaitRecords': 2184
        },
        'trainSPNetOnlyIfRequested': False,
    },
}
4

2 に答える 2

0

問題は、SimpleVector クラスが dict ではなく配列を入力として受け入れ、それを内部的に{'list': {'idx0': 1, 'idx1': 2, ...}}(つまり、この dict が入力であるかのように) 再構築することです。これは一貫して行われていれば問題ありませんが、エラーはどこかで壊れていることを示しています。これについて@breznakと話してください。

于 2013-11-13T10:30:27.247 に答える
0

OPF の処理は困難でした。インデックスの配列をテンポラル プーラーに入力したかったので、アルゴリズムと直接やり取りすることにしました ( hello_tp.pyに大きく依存していました)。SimpleVector をまとめて無視し、代わりに BitmapArray エンコーダーを使用しました。

Subutaiは nupic-discuss listserve に有益なメールを送信しており、そこで彼は NuPIC API の 3 つの主な領域 (アルゴリズム、ネットワーク/リージョン、および OPF) を分析しています。それは、自分の選択肢をよりよく理解するのに役立ちました。

于 2013-11-20T01:33:47.660 に答える