1

2 つの 60 x 80921 行列があり、1 つはデータで埋められ、もう 1 つは参照で満たされています。
値をキーと値のペアとして 2 つの異なる LMDB に格納したいと考えています。1 つはトレーニング用 (たとえば、60000 列のマークの周りをスライスします) で、もう 1 つはテスト用です。これが私の考えです。それは機能しますか?

X_train = X[:,:60000]
Y_train = Y[:,:60000]
X_test = X[:,60000:]
Y_test = Y[:,60000:]

X_train = X_train.astype(int)
X_test = X_test.astype(int)
Y_train = Y_train.astype(int)
Y_test = Y_test.astype(int)

map_size = X_train.nbytes * 10
env = lmdb.open('sensormatrix_train_lmdb', map_size=map_size)
with env.begin(write=True) as txn:  
    for i in range(60):
        for j in range(60000):
            datum = caffe.proto.caffe_pb2.Datum()
            datum.height = X_train.shape[0]
            datum.width = X_train.shape[1]
            datum.data = X_train[i,j].tobytes()
            datum.label= int(Y[i,j])
            str_id= '{:08}'.format(i)

私は本当にコードがわかりません。そして、最後の行は何format(i)を指していますか?

4

1 に答える 1

0

何をしようとしているのかは 100% 明確ではありません: 各エントリを個別のデータ サンプルとして扱っているのか、それとも、dim=60 の 60K 1D ベクトルでトレーニングしようとしているのか...

薄暗い 60 の 60K のトレーニング サンプルがあると仮定すると、次のようにトレーニング lmdb を記述できます。

env_x = lmdb.open('sensormatrix_train_x_lmdb', map_size=map_size) # you can put map_size a little bigger 
env_y = lmdb.open('sensormatrix_train_y_lmdb', map_size=map_size)
with env_x.begin(write=True) as txn_x, env_y.begin(write=True) as txn_y:
    for i in xrange(X_train.shape[1]):
        x = X_train[:,i]
        y = Y_train[:,i] 

        datum_x = caffe.io.array_to_datum(arr=x.reshape((60,1,1)),label=i)
        datum_y = caffe.io.array_to_datum(arr=y.reshape((60,1,1)),label=i)
        keystr = '{:0>10d}'.format(i) # format an lmdb key for this entry
        txn_x.put( keystr, datum_x.SerializeToString() ) # actual write to lmdb
        txn_y.put( keystr, datum_y.SerializeToString() )

これで、トレーニング用に 2 つの lmdb が作成されました。'prototxt'対応する 2 つの"Data"レイヤーが必要です。

layer {
  name: "input_x"
  top: "x"
  top: "idx_x"
  type: "Data"
  data_param { source: "sensormatrix_train_x_lmdb" batch_size: 32 }
  include { phase: TRAIN }
}
layer {
  name: "input_y"
  top: "y"
  top: "idx_y"
  type: "Data"
  data_param { source: "sensormatrix_train_y_lmdb" batch_size: 32 }
  include { phase: TRAIN }
}

x y対応するペアを確実に読み取るために、健全性チェックを追加できます

layer {
  name: "sanity"
  type: "EuclideanLoss"
  bottom: "idx_x"
  bottom: "idx_y"
  top: "sanity"
  loss_weight: 0 
  propagate_down: false
  propagate_down: false
}
于 2016-04-06T12:11:05.417 に答える