pythonでTheanoライブラリを使用して、Deep Belief Networksでいくつかの実験を行おうとしています。このアドレスのコードを使用しています: DBNフルコード 。このコード MNIST手書きデータベース を使用します。このファイルはすでにpickle形式です。次の場所で選択されていません。
これはさらに次のように選択されていません:
誰かが私自身を作成するためにこのデータセットを構築するコードを教えてもらえますか?私が使用しているDBNの例では、この形式のデータが必要であり、その方法がわかりません。誰かがこれを修正する方法について何かアイデアがあれば、教えてください。
これが私のコードです:
from datetime import datetime
import time
import os
from pprint import pprint
import numpy as np
import gzip, cPickle
import theano.tensor as T
from theano import function
os.system("cls")
filename = "completeData.txt"
f = open(filename,"r")
X = []
Y = []
for line in f:
line = line.strip('\n')
b = line.split(';')
b[0] = float(b[0])
b[1] = float(b[1])
b[2] = float(b[2])
b[3] = float(b[3])
b[4] = float(b[4])
b[5] = float(b[5])
b[6] = float(b[6])
b[7] = float(b[7])
b[8] = float(b[8])
b[9] = float(b[9])
b[10] = float(b[10])
b[11] = float(b[11])
b[12] = float(b[12])
b[13] = float(b[13])
b[14] = float(b[14])
b[15] = float(b[15])
b[17] = int(b[17])
X.append(b[:16])
Y.append(b[17])
Len = len(X);
X = np.asmatrix(X)
Y = np.asarray(Y)
sizes = [0.8, 0.1, 0.1]
arr_index = int(sizes[0]*Len)
arr_index2_start = arr_index + 1
arr_index2_end = arr_index + int(sizes[1]*Len)
arr_index3_start = arr_index2_start + 1
"""
train_set_x = np.array(X[:arr_index])
train_set_y = np.array(Y[:arr_index])
val_set_x = np.array(X[arr_index2_start:arr_index2_end])
val_set_y = np.array(Y[arr_index2_start:arr_index2_end])
test_set_x = np.array(X[arr_index3_start:])
test_set_y = np.array(X[arr_index3_start:])
train_set = train_set_x, train_set_y
val_set = val_set_x, val_set_y
test_set = test_set_x, test_set_y
"""
x = T.dmatrix('x')
z = x
t_mat = function([x],z)
y = T.dvector('y')
k = y
t_vec = function([y],k)
train_set_x = t_mat(X[:arr_index].T)
train_set_y = t_vec(Y[:arr_index])
val_set_x = t_mat(X[arr_index2_start:arr_index2_end].T)
val_set_y = t_vec(Y[arr_index2_start:arr_index2_end])
test_set_x = t_mat(X[arr_index3_start:].T)
test_set_y = t_vec(Y[arr_index3_start:])
train_set = train_set_x, train_set_y
val_set = val_set_x, val_set_y
test_set = test_set_x, test_set_y
dataset = [train_set, val_set, test_set]
f = gzip.open('..\..\..\data\dex.pkl.gz','wb')
cPickle.dump(dataset, f, protocol=-1)
f.close()
pprint(train_set_x.shape)
print('Finished\n')
Theanoチュートリアルのコードを独自のデータに適合させるために.pklファイルは必要ありません。それらのデータ構造を模倣する必要があるだけです。
次の行を探します。 DBN.pyの303行目です。
_datasets = load_data(dataset)
train_set_x, train_set_y = datasets[0]
_
独自の_train_set_x
_および_train_set_y
_に置き換えます。
_my_x = []
my_y = []
with open('path_to_file', 'r') as f:
for line in f:
my_list = line.split(' ') # replace with your own separator instead
my_x.append(my_list[1:-1]) # omitting identifier in [0] and target in [-1]
my_y.append(my_list[-1])
train_set_x = theano.shared(numpy.array(my_x, dtype='float64'))
train_set_y = theano.shared(numpy.array(my_y, dtype='float64'))
_
これを入力データと使用しているコードに適合させます。
同じことがcA.py、dA.pyおよびSdA.pyただし、_train_set_x
_のみを使用します。
_n_ins=28 * 28
_など、mnistイメージサイズがハードコーディングされている場所を探します。 _28 * 28
_を独自の列数に置き換えます。
ここに、Theanoが使用できる形式でデータを配置します。
_train_set_x = theano.shared(numpy.array(my_x, dtype='float64'))
train_set_y = theano.shared(numpy.array(my_y, dtype='float64'))
_
shared()
は、numpy配列をGPUでの効率化のために設計されたTheano形式に変換します。
_dtype='float64'
_はTheano配列で予期されています。
基本的なテンソル機能 の詳細。
.pklファイルは、データ構造を保存する方法です。
自分で作成できます。
_import cPickle
f = file('my_data.pkl', 'wb')
cPickle.dump((train_set_x, train_set_y), f, protocol=cPickle.HIGHEST_PROTOCOL)
f.close()
_
読み込みと保存 の詳細。
ピクルス化されたファイルは、トレーニングセット、検証セット、テストセットの3つのリストのタプルを表します。 (train、val、test)
これは役に立ちます:
from PIL import Image
from numpy import genfromtxt
import gzip, cPickle
from glob import glob
import numpy as np
import pandas as pd
Data, y = dir_to_dataset("trainMNISTForm\\*.BMP","trainLabels.csv")
# Data and labels are read
train_set_x = Data[:2093]
val_set_x = Data[2094:4187]
test_set_x = Data[4188:6281]
train_set_y = y[:2093]
val_set_y = y[2094:4187]
test_set_y = y[4188:6281]
# Divided dataset into 3 parts. I had 6281 images.
train_set = train_set_x, train_set_y
val_set = val_set_x, val_set_y
test_set = test_set_x, val_set_y
dataset = [train_set, val_set, test_set]
f = gzip.open('file.pkl.gz','wb')
cPickle.dump(dataset, f, protocol=2)
f.close()
これが私が使った関数です。ファイルの詳細に応じて変更される場合があります。
def dir_to_dataset(glob_files, loc_train_labels=""):
print("Gonna process:\n\t %s"%glob_files)
dataset = []
for file_count, file_name in enumerate( sorted(glob(glob_files),key=len) ):
image = Image.open(file_name)
img = Image.open(file_name).convert('LA') #tograyscale
pixels = [f[0] for f in list(img.getdata())]
dataset.append(pixels)
if file_count % 1000 == 0:
print("\t %s files processed"%file_count)
# outfile = glob_files+"out"
# np.save(outfile, dataset)
if len(loc_train_labels) > 0:
df = pd.read_csv(loc_train_labels)
return np.array(dataset), np.array(df["Class"])
else:
return np.array(dataset)