My python/sklearn/SVM is running endlessly - python
Hi I'm trying to train MNIST classifier with SVM(SVC), sci-kit learn(sklearn).
But my training runs endlessly.. What should I do?
I tried changing parameters of SVC but I'm not sure about what I'm doing
And It doesn't work...
The number of training data is 60,000
Please help me
import os
import struct
import numpy as np
import matplotlib .pyplot as plt
from sklearn.svm import SVC
from google.colab import drive
drive.mount('/content/gdrive')
def read(dataset = "training", path="."):
if dataset is "training":
fname_img = os.path.join(path, 'train-images-idx3-ubyte.idx3-ubyte')
fname_lbl = os.path.join(path, 'train-labels-idx1-ubyte.idx1-ubyte')
elif dataset is "testing":
fname_img = os.path.join(path, 't10k-images-idx3-ubyte.idx3-ubyte')
fname_lbl = os.path.join(path, 't10k-labels-idx1-ubyte.idx1-ubyte')
else:
raise Exception("dataset must be 'testing' or 'training'")
with open(fname_lbl, 'rb') as flbl:
magic, num = struct.unpack(">II", flbl.read(8))
lbl = np.fromfile(flbl, dtype=np.int8)
with open(fname_img, 'rb') as fimg:
magic, num, rows, cols = struct.unpack(">IIII", fimg.read(16))
img = np.fromfile(fimg, dtype=np.uint8).reshape(len(lbl), rows, cols)
get_img = lambda idx: (lbl[idx], img[idx])
# Create an iterator which returns each image in turn
for i in range(len(lbl)):
yield get_img(i)
tr = list(read("training", "/content/gdrive/My Drive/ColabNotebooks/MNIST"))
tst = list(read("testing", "/content/gdrive/My Drive/ColabNotebooks/MNIST"))
def seperate(data):
labels =[]
images =[]
for i in data:
labels.append(int(i[0]))
images.append(i[1])
return {"labels":labels, "images":images}
train = seperate(tr)
test = seperate(tst)
clf = SVC(kernel = 'linear', cache_size = 6000, gamma = 0.001, C = 100)
train_len = len(tr)
train_Array = np.array(train["images"]).reshape(train_len, -1)
clf.fit(train_Array, train["labels"])
Related
GridSearchCV with LightFM
I'm a newbie so my apologies if something I ask might be to obvious and my english is not quite good. I'm stuck in doing a custom grid search with cross validation with LightFM which does not come with those functions. It seem the way I split the dataset is wrong but I do not understand why since I've replicated the code of the function random_train_test_split to get the folds. The error I get is Incorrect number of features in item_features. I'm stuck and I do not know how to go on. import pandas as pd import scipy.ndimage.tests import turicreate as tc from gensim.models import KeyedVectors import os import numpy as np from lightfm import LightFM from lightfm.data import Dataset from lightfm.evaluation import auc_score from sklearn.model_selection import KFold, train_test_split, GridSearchCV from lightfm.cross_validation import random_train_test_split import itertools import scipy.sparse def create_processed_dataset(): """ One-Time execution Returns: embeddings.csv and observations.csv """ output_path = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'data', 'ml-100k-filtered') os.makedirs(output_path, exist_ok=True) """ Data imports """ u_cols = ['user_id', 'age', 'sex', 'occupation', 'zip_code'] users = pd.read_csv('data/ml-100k/u.user', sep='|', names=u_cols, encoding='latin-1') r_cols = ['user_id', 'movie_id', 'rating', 'unix_timestamp'] ratings = pd.read_csv('data/ml-100k/u.data', sep='\t', names=r_cols, encoding='latin-1') vectors: KeyedVectors = KeyedVectors.load('data/dbpedia/model.kv') # Load mappings and filter them if a corresponding embedding is found mappings = pd.read_csv('data/LODrecsys/mappings.tsv', sep='\t', header=None, names=["movie_id", "movie_name", "movie_uri"]) mappings = mappings[mappings.apply(lambda x: vectors.__contains__(x["movie_uri"]), axis=1)] mappings = mappings[mappings["movie_id"].isin(ratings["movie_id"])] # Create a pandas dataframe with embeddings embeddings = pd.DataFrame([vectors[uri] for uri in mappings["movie_uri"]]) embeddings.insert(loc=0, column='movie_id', value=list(mappings["movie_id"])) embeddings.set_index("movie_id", inplace=True) ratings = ratings[ratings["movie_id"].isin(mappings["movie_id"])] embeddings.to_csv(os.path.join(output_path, 'embeddings.csv')) ratings.to_csv(os.path.join(output_path, 'observations.csv'), index=False) def generate_list_of_hyper_parameters(parameters_grid): return ( {y: z for y, z in zip(parameters_grid.keys(), x)} for x in itertools.product(*parameters_grid.values()) ) def create_csr_from_dataset(observations, embeddings): dataset = Dataset(item_identity_features=True, user_identity_features=False) feature_names = [str(i) for i in range(0, 200)] dataset.fit(observations['user_id'], observations['movie_id'], item_features=feature_names) num_users, num_items = dataset.interactions_shape() print('Num users: {}, num_items {}.'.format(num_users, num_items)) num_items, num_fts = dataset.item_features_shape() print(f'Num items: {num_items}, num_features: {num_fts}.') interactions, weights = dataset.build_interactions( observations[['user_id', 'movie_id', 'rating']].itertuples(index=False, name=None) ) item_features = [] for item_id, row in zip(embeddings.index.to_list(), embeddings.to_dict(orient="records")): for x, y in row.items(): item_features.append((item_id, {x: y})) item_features = dataset.build_item_features(item_features) return interactions, item_features def folding(interactions, k_folds=10): if not scipy.sparse.issparse(interactions): return None coo = interactions.tocoo() kf = KFold(n_splits=k_folds) # Define the split - into 2 folds shape = interactions.shape uids, iids, data = (coo.row, coo.col, coo.data) def to_coo_matrix(indexes): return scipy.sparse.coo_matrix( (data[indexes], (uids[indexes], iids[indexes])), shape=shape, dtype=coo.dtype, ) return [ (to_coo_matrix(train_index), to_coo_matrix(validation_index)) for train_index, validation_index in kf.split(data) ] def grid_search(parameters_grid, k_fold, interactions, item_features=None): results = [] for hyper_params in generate_list_of_hyper_parameters(parameters_grid): for current_fold, (train, validation) in enumerate(folding(interactions, k_folds=10)): print(f"{hyper_params} && current_fold:{current_fold}") model = LightFM(**hyper_params) model.fit(train, epochs=50, item_features=item_features, num_threads=6) score = auc_score(model, validation, train_interactions=train, num_threads=6).mean() results.append((score, hyper_params, model)) print(f"{hyper_params} && current_fold:{current_fold} && score: {score}") results.sort(key=lambda x: x[0]) return results def main(): observations = pd.read_csv('data/ml-100k-filtered/observations.csv') embeddings = pd.read_csv('data/ml-100k-filtered/embeddings.csv').set_index("movie_id") interactions, item_features = create_csr_from_dataset(observations, embeddings) train, test = random_train_test_split(interactions, test_percentage=0.2) print(embeddings.head()) num_movies = len(embeddings.index) num_ratings = len(observations.index) num_users = observations.user_id.unique().size sparsity = 1 - num_ratings / (num_users * num_movies) print( f"num_users: {num_users}, num_movies: {num_movies}, " f"num_observations: {num_ratings}, " f"sparsity: ~{sparsity * 100}" ) model = LightFM() # parametri da testare param_grid = { 'no_components': range(10, 110, 10), 'learning_rate': [0.01, 0.05, 0.1], 'item_alpha': [0.0001, 0.001, 0.01], 'user_alpha': [0.0001, 0.001, 0.01], } results = grid_search(param_grid, 10, train, item_features=item_features) print(results[0][0]) # grid = GridSearchCV(model, param_grid, scoring='roc_auc', cv=10) # grid.fit(train) # # # stampare i migliori parametri # print("Best parameters found: ", grid.best_params_) if __name__ == "__main__": main() Head of embeddings.csv movie_id,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199 781,0.104976304,-0.28639936,0.263389,-0.063659474,0.2572639,-0.020438952,-0.539728,-0.5362033,0.044485092,-0.2635477,-0.16790706,-0.3090492,-0.16604371,-0.17663258,-0.52484894,0.18765214,0.023662027,0.30391097,-0.20567082,0.0017149863,-0.5396369,0.5048874,-0.1330814,0.20542468,0.30167308,-0.7394157,-0.72330767,0.19829337,0.114596725,-0.21563736,0.036049057,0.17444284,-0.048169367,0.072739236,0.45243305,0.30419606,0.05917972,0.095685355,0.47091144,0.82561576,0.39543882,-0.17032664,0.20288855,0.9243431,0.8003851,0.38405365,0.6077287,0.013964407,0.17004211,-0.3161952,-0.026656324,-0.53144175,0.51453334,-0.088666946,-0.043593623,-0.40192905,0.16968574,0.49007356,-0.061701216,0.22878993,0.39561245,0.68686026,0.19645824,-0.29711974,-0.39910316,0.75740165,0.19224961,-0.5461575,-0.5391435,-0.039670262,-0.41069844,-0.0040386477,-0.46357092,0.31994164,0.4489141,0.029307673,0.14275625,0.598504,0.30107188,0.17440903,0.19279842,-0.5319882,-0.16329569,0.13279761,0.3125511,-0.076068535,0.04027855,0.15937261,0.030322008,-0.25054383,0.3420725,0.0023631598,-0.15594675,-0.02108332,-0.33198243,-0.09107834,0.10918749,-0.20812488,0.48240393,0.1413759,0.19932991,-0.04550627,-0.4199228,-0.30975172,-0.16584149,0.13618651,0.032270815,0.21531013,-0.34754023,0.38745317,-0.3141335,-0.0076772026,-0.15902501,-0.1922333,-0.91181076,0.30101702,-0.5477423,0.21788768,-0.37916282,0.2178647,-0.23305914,0.39835364,0.29663038,0.17434639,-0.2767167,-0.079150155,-0.020879027,0.24703448,0.026067395,0.30733135,-0.18035492,0.098099545,0.012437648,-0.37087408,-0.43842456,-0.0740163,-0.16759877,0.2330794,0.36284205,0.042673703,0.08767547,-0.26393065,-0.044456694,0.519393,0.6997318,-0.015339097,-0.12928426,0.3939398,0.21620893,0.08203938,0.59946024,-0.01698428,0.0012696922,0.22144872,-0.7580897,-0.15163377,0.22549058,0.21746552,0.5356927,0.20340215,-0.15772144,-0.12937415,-0.10244009,0.25065783,0.094861135,0.172628,-0.287088,0.23041421,-0.14308949,0.13672677,-0.37433547,0.33438677,0.80673337,-0.34667587,0.47028127,-0.4950244,0.24330682,0.11687778,-0.44560146,-0.119554825,0.22739832,0.2406247,-0.091462746,-0.9168895,-0.40797755,-0.09773033,0.21946639,-0.15086696,-0.20639573,-0.012351767,1.1847337,0.12334188,0.101606116,0.19813639,-0.4772674,-0.6815623,-0.48542064,-0.278218,-0.2703869,0.35741097 521,0.4834846,-0.23845299,-0.21415482,-0.14914818,0.37452647,-0.2639882,-0.19339855,-0.5819728,-0.5480068,-0.680737,-0.5018884,0.15885419,-0.52158093,-0.32109717,-0.4306464,-0.15114668,0.19270135,-0.25596684,0.3264883,0.038799148,-0.5314147,0.5727659,-0.6976444,-0.0031756312,0.4308029,-0.9178242,-0.4543698,-0.07639094,-0.048227325,-0.21814795,-0.12718941,0.25438586,-0.076513454,-0.007188802,0.06668828,0.28282973,0.31041262,0.011750209,-0.06269789,0.6973704,0.15802476,0.0066345967,-0.017412819,0.43328476,0.016537199,0.40507087,0.7983648,0.29395765,0.05465501,-0.42503813,-0.07169553,-0.22310269,-0.0841079,-0.28536376,-0.29453915,0.18276429,0.51880515,-0.1363985,-0.20796828,-0.23383135,0.21936962,0.16077477,-0.08352809,-0.44291374,-0.006436026,0.5807399,0.3369641,-0.42017564,-0.1765961,0.002688498,-0.49212384,0.44475305,0.4833789,0.4590813,0.19189888,0.18402466,-0.5216376,0.35626128,-0.26259816,0.10202889,0.33155227,0.1554108,-0.34849754,-0.0835181,0.3608791,-0.24104835,-0.3426349,-0.39945003,0.19826588,-0.013716115,-0.18012097,0.017895179,-0.20326746,-0.28829327,-0.27310565,0.08799436,-0.090023905,-0.33734864,-0.4057884,0.4391738,-0.19845818,0.28421938,-0.13515925,-0.034714248,-0.14890312,-0.6278702,0.16775073,0.29424798,-0.37155896,-0.04562982,-0.16632678,-0.48772115,-0.0829048,-0.12879832,-1.1941701,0.036262244,-0.54917175,0.08452879,-0.020562846,0.5727009,-0.38378647,-0.16947998,0.23402393,0.1757261,0.18268874,0.19349255,0.5213705,0.04873449,0.26911566,-0.15686822,-0.7430511,0.35789433,0.025986547,-0.73101807,-0.15174152,-0.6247366,-0.3085124,0.06883673,0.283824,-0.29984295,-0.15076798,0.07029077,-0.31470934,0.27179474,0.24899411,-0.057006147,-0.46430832,0.293169,0.20246102,0.11565917,0.4896067,-0.16753878,0.053250737,0.42725414,0.031641196,0.2438955,-0.020254094,0.13220254,-0.08638797,0.4737355,0.26201698,-0.17828363,-0.2764023,-0.04341643,-0.07235413,-0.44729337,-0.095581695,0.15628703,-0.017644022,-0.10891184,-0.1982593,0.1994896,0.6321398,0.036708854,0.49601346,-0.3402982,-0.095669836,0.037039768,-0.2889446,-0.1277229,-0.113685735,0.57858396,0.030328764,-0.6693496,-0.39052898,-0.64047015,0.58858204,-0.24054149,0.034169126,0.3630536,0.5616578,-0.29867598,-0.07564583,0.2850233,0.056441583,-0.49339303,-0.5660689,-0.65997607,-0.47282198,1.8606243e-05 1590,0.05941767,-0.3993399,-0.1298459,-0.080818005,0.44435924,-0.11421722,-0.31332758,-0.81384706,0.08015667,-0.39844254,-0.81037426,-0.30531615,-0.48657808,-0.16939472,-0.046779584,-0.20503436,-0.40876153,0.24482553,-0.045942448,0.5312148,-0.8579908,0.6439102,-0.5025662,-0.19216116,0.32369378,-0.17766032,-0.3439799,-0.09829475,0.48353088,-0.19016655,0.13181841,0.5165478,-0.43528923,0.14950746,0.26477075,0.20312098,-0.20503096,0.050996274,0.2862533,0.8499676,-0.26986682,-0.114738576,-0.15050523,0.2713783,0.20189986,0.12967147,0.22785097,-0.079153396,0.36194524,-0.6376741,-0.21367697,0.041446075,-0.12271453,-0.65323865,-0.28616807,-0.111520484,0.43526977,0.5031802,0.4039687,-0.279708,0.2243983,0.28985283,-0.1668437,-0.2898966,-0.5576508,0.491614,0.30399892,-0.69570065,-0.43999743,0.117331214,-0.67416537,0.047031827,0.5364804,-0.041629195,0.66792035,0.35590017,-0.16253334,0.46751112,-0.79641575,0.14861014,0.31830528,-0.567578,0.15521573,-0.19457583,-0.23927484,-0.31114638,0.4783339,-0.041086923,0.33376405,-0.17237572,-0.13189459,0.062240843,0.018567545,0.20897199,-0.41638336,-0.034222282,-0.00867459,-0.41689333,-0.03165012,0.49717176,0.10709976,0.19650076,-0.3332431,-0.103964016,-0.53446937,0.32072574,0.16265534,0.5113785,-0.10267297,-0.27707252,0.1787905,-0.37411007,0.21731602,0.10512698,-0.8509798,0.36154267,-0.4811016,0.57361645,-0.49470577,0.48559442,-0.6293668,0.16920403,0.1583842,0.3939669,-0.19239852,0.012528246,0.045776017,0.11170228,0.64706856,0.20509283,-0.509191,-0.05886244,-0.5023932,-0.29391384,-0.20070714,-0.3791569,0.09131153,0.13778323,-0.099376984,-0.7821524,0.34264925,-0.2860546,-0.0055139684,0.08234838,0.32018226,-0.28082213,0.20966247,0.039263353,0.5605049,-0.23947746,0.4547303,0.6292773,-0.7470398,0.18514062,-0.6196754,0.23065008,-0.21438336,0.09843864,0.26463908,0.44211373,0.22545318,-0.23579475,-0.4698368,0.119940385,-0.33248,-0.17298971,-0.047025036,-0.31992626,-0.13884223,0.33602548,-0.14379616,0.01660432,0.69129556,-0.2623254,0.48632252,-0.2283669,0.07059559,0.1516157,-0.44664145,0.054038346,0.029984698,0.6208362,-0.2540388,-0.43699056,-0.69213647,-0.41838953,0.4951119,0.24951442,0.041442018,0.3817064,0.4745367,-0.13778052,0.092584506,0.28134617,-0.23201333,-0.22493492,-0.0953396,-0.17562813,0.17628315,-0.34246898 Head of observations.csv user_id,movie_id,rating,unix_timestamp 196,242,3,881250949 22,377,1,878887116 166,346,1,886397596 298,474,4,884182806
I'm trying to extract the features of pretrained resnet50 using dataloader, but it doesn't work
import os import numpy as np from google.colab import drive import csv import json import torch from torch.utils.data import Dataset, DataLoader import torch.nn as nn from torch.autograd import Variable import torchvision from torchvision import models import torchvision.transforms as transforms import pandas as pd import cv2 import shutil import time from tqdm import tqdm from PIL import Image def getVector(img): model = models.resnet50(pretrained = True) model.eval() img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img = Image.fromarray(img) preprocess = transforms.Compose([ transforms.Resize((224,224)), transforms.ToTensor(), transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225)), ]) input_tensor = preprocess(img) input_tensor = input_tensor.unsqueeze(0) with torch.no_grad(): my_output = None def my_hook(m,i,o): nonlocal my_output my_output = o a_hook = model.avgpool.register_forward_hook(my_hook) model(input_tensor) a_hook.remove() return my_output def makeFeature(filePath): fpsCount = 0 if os.path.isfile(filePath): getVideo = cv2.VideoCapture(filePath) else: print("no file || file name: " + str(filePath)) fps = int(getVideo.get(cv2.CAP_PROP_FPS)) #fps = int(fps/2) vidInput = [] print(fps) print(getVideo.isOpened()) while(getVideo.isOpened()): ret, getImage = getVideo.read() if ret == False: break if(int(getVideo.get(1)) % fps == 0): #print("fps:" + str(getVideo.get(1))) #print("get image: ") feature = getVector(getImage) vidInput.append(feature) fpsCount = fpsCount + 1 if fpsCount == 10: break break #name = filePath.replace("mp4","npy") #np.save(name, vidInput) #print("working") getVideo.release() return vidInput class CustomDataset(Dataset): #Dataset μμ def __init__(self): #self.train_list = glob.glob('*.mp4') self.train_list = '/content/drive/MyDrive/abseiling_0.mp4' def __len__(self): return len(self.train_list) def __getitem__(self, idx): return makeFeature(self.train_list) dataset = CustomDataset() dataloader = DataLoader(dataset, batch_size=1, shuffle=True) for i in dataloader: print(len(i)) np.save('test_save',i) The code reads the video and reads one frame per second, extracts only the feature value from the last layer in the pretrained resnet, and returns it. and appends them, and then tries to np.save. but When I print len ββin the last line, not only this value is printed several times, but all lens are printed as 0. please tell me how to solve it π₯
Error preprocessing the input data when using Tensorflow Dataset API
I have images of [64,512,5] stored in *.npy files which I convert into *.tfrecords files. I have verified that the reading of said records corresponds correctly with what is present in the *.npy files. However, when I perform some operation on the parser, like adding 1 to each pixel of the image, the result is not the expected one. The result should be 65*512*5 = 163840 but it is 163839.99980013957 (not always the same) I have tried to perform different operations like tf.subtract, but the results are the same. Could someone tell me what is wrong? import re import ast import sys, select import random as rn from glob import glob from tqdm import tqdm from datetime import datetime from configparser import SafeConfigParser import numpy as np import numpy.ma as ma import scipy.misc import os.path from os import mkdir, stat from os.path import exists, dirname, abspath from os.path import join as dir_join import tensorflow as tf ''' File hierarchy ''' _code_dir = dirname(abspath(__file__)) _python_dir = dirname(_code_dir) _model_dir = dirname(_python_dir) _project_dir = dirname(_model_dir) _ml_dir = dirname(_project_dir) _srv_dir = dirname(_ml_dir) _root_datasets_dir = dir_join(_srv_dir,'machine_learning','data_sets/ssd_prepared') _config_dir = dir_join(_python_dir, 'config') '''Data sets directories ''' THIS_DATA_SET_DIR = 'Sph_50m' #WARNING: Global variable also used in helper.py _data_dir = dir_join(_root_datasets_dir, THIS_DATA_SET_DIR) _data_set_dir = dir_join(_data_dir,'ImageSet') _data_npy_dir = dir_join(_data_dir,'data') _data_tfRecord_dir = dir_join(_data_dir,'tfRecord') ''' Configuration parser ''' cfg_parser = SafeConfigParser() cfg_parser.read(dir_join(_config_dir,'cfg_model.ini')) ''' Private variables ''' _batch_size = cfg_parser.getint(section='train', option='batch_size') _max_epoch = cfg_parser.getint(section='train', option='max_epoch') _standarize = cfg_parser.getboolean(section='train', option='standarize_input') _input_shape = ast.literal_eval(cfg_parser.get(section='data_shape', option='input_shape')) _label_channel = cfg_parser.getint(section='data_shape', option='label_channel') _track_channel = cfg_parser.getint(section='data_shape', option='track_channel') _mask_channel = cfg_parser.getint(section='data_shape', option='mask_channel') _data_train = cfg_parser.get(section='data_set', option='data_train') _data_val = cfg_parser.get(section='data_set', option='data_val') _data_test = cfg_parser.get(section='data_set', option='data_test') def _int64_feature(value): return tf.train.Feature(int64_list=tf.train.Int64List(value=value.reshape(-1))) def _bytes_feature(value): return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value])) def _floats_feature(value): return tf.train.Feature(float_list=tf.train.FloatList(value=value.reshape(-1))) def numpy_to_TFRecord(): if not exists(_data_tfRecord_dir): mkdir(_data_tfRecord_dir) for dataset in [_data_train, _data_val, _data_test]: tfRecord_folder = dir_join(_data_tfRecord_dir, dataset) if not exists(tfRecord_folder): mkdir(tfRecord_folder) #Retrieve list of files projections_dir=[] file_ = open(dir_join(_data_set_dir, dataset+'.txt'), 'r') for x in file_.readlines(): file_nat = x.strip()+'.npy' filename = dir_join(_data_npy_dir, file_nat) assert exists(filename), "{} doesn't exist".format(filename) projections_dir.append(filename) file_.close() totaltfRecordSize = 0 numFile = 0 for projection_dir in tqdm(projections_dir, ncols= 100, desc = 'TFRecord {}'.format(dataset)): scanName = projection_dir.split('/')[-1].split('.')[0] if totaltfRecordSize > 100*(10**6) or totaltfRecordSize == 0: # address to save the TFRecords file train_filename = dir_join(tfRecord_folder, \ str(numFile) + '_' + dataset +'.tfrecords') # open the TFRecords file writer = tf.python_io.TFRecordWriter(train_filename) numFile += 1 totaltfRecordSize = 0 # Load the image projection = np.load(projection_dir) image = projection[:,:,:_label_channel] label = projection[:,:,_label_channel].astype(int) mask = projection[:,:,_mask_channel].astype(int) track = projection[:,:,_track_channel].astype(int) # Create a feature feature = {'image': _floats_feature(image), 'label': _int64_feature(label), 'mask' : _int64_feature(mask), 'track': _int64_feature(track), 'scanName': _bytes_feature(tf.compat.as_bytes(scanName))} # Create an example protocol buffer example = tf.train.Example(features=tf.train.Features(feature=feature)) # Serialize to string and write on the file writer.write(example.SerializeToString()) fileSize = stat(train_filename).st_size totaltfRecordSize += fileSize writer.close() sys.stdout.flush() def readTFRecord(): # Transforms a scalar string `example_proto` into a pair of a scalar string and # a scalar integer, representing an image and its label, respectively. image_dim = _input_shape[0] * _input_shape[1] * _label_channel label_dim = _input_shape[0] * _input_shape[1] mean = np.load(dir_join(_data_dir,'mean.npy')) std = np.load(dir_join(_data_dir,'std.npy')) mean_tf = tf.convert_to_tensor(mean, dtype=tf.float32, name='mean') std_tf = tf.convert_to_tensor(std, dtype=tf.float32, name='std') with tf.variable_scope('TFRecord'): def _parse_function(example_proto): with tf.variable_scope('parser'): features = {'image': tf.FixedLenFeature([image_dim], tf.float32), 'label': tf.FixedLenFeature([label_dim], tf.int64), 'mask' : tf.FixedLenFeature([label_dim], tf.int64), 'track': tf.FixedLenFeature([label_dim], tf.int64), 'scanName': tf.FixedLenFeature([], tf.string)} parsed_features = tf.parse_single_example(example_proto, features) # Reshape image data into the original shape image = tf.reshape(parsed_features['image'], [_input_shape[0], _input_shape[1], _label_channel], name='image') label = tf.reshape(parsed_features['label'], _input_shape, name='lable_reshape') mask = tf.reshape(parsed_features['mask'], _input_shape, name='mask_reshape') track = tf.reshape(parsed_features['track'], _input_shape, name='track_reshape') scanName = parsed_features['scanName'] image = image + tf.constant(1., dtype=tf.float32) return image, label, mask, track, scanName training_filenames = glob(dir_join(_data_tfRecord_dir, _data_train, '*.tfrecords')) validation_filenames = glob(dir_join(_data_tfRecord_dir, _data_val, '*.tfrecords')) filenames = tf.placeholder(tf.string, shape=[None], name='filenames') dataset = tf.data.TFRecordDataset(filenames) dataset = dataset.map(_parse_function, num_parallel_calls=20) # Parse the record into tensors. dataset = dataset.shuffle(buffer_size=10000) dataset = dataset.batch(_batch_size, drop_remainder=True) dataset = dataset.prefetch(buffer_size=10) iterator = dataset.make_initializable_iterator() next = iterator.get_next() sess = tf.Session() while True: sess.run(iterator.initializer, feed_dict={filenames: training_filenames}) try: img, _, _, _, scanX = sess.run(next) for i, scan in enumerate(scanX): print(scan.decode("utf-8")) projection = np.load(dir_join(_data_npy_dir, scan.decode("utf-8") + '.npy')) imagenp = projection[:,:,:_label_channel] if np.abs(np.sum(img[i,...] - imagenp)) > 0.: print(np.sum(img[i,...] - imagenp)) except tf.errors.OutOfRangeError: break return training_filenames, validation_filenames, filenames, iterator if __name__ == '__main__': numpy_to_TFRecord() readTFRecord() The test I'm doing in the previous code is to convert the *.npy files to *.tfrecords. Then, I compare the *.trecords with the *.npy. The value should be 0 if both images were identical. img, _, _, _, scanX = sess.run(next) for i, scan in enumerate(scanX): print(scan.decode("utf-8")) projection = np.load(dir_join(_data_npy_dir, scan.decode("utf-8") + '.npy')) imagenp = projection[:,:,:_label_channel] print(np.sum(img[i,...] - imagenp)) If the data is not preprocessed, these images are the same, however, if we perform some kind of transformation, the results do not match what was expected. In this case we are adding 1 to each pixel of the image, so the total difference should be 64 * 512 * 5. image = image + tf.constant(1., dtype=tf.float32) I would like to solve this error, since so far I have not been able to obtain the results obtained by my neural network using feed_dict instead of Tensorflow Dataset API, and this is the only point where I can observe a difference in the input data.
I'm getting a Memory Error while processing my dataset in python ? What could be the reason?
I'm trying a deep learning code for processing my dataset which consists 1,12,120 images. What my code does is the following: import numpy as np import matplotlib.pyplot as plt import pandas as pd import imageio from os import listdir import skimage.transform import pickle import sys, os from sklearn.preprocessing import MultiLabelBinarizer def get_labels(pic_id): labels = meta_data.loc[meta_data["Image Index"]==pic_id,"Finding Labels"] return labels.tolist()[0].split("|") #Loading Data meta_data = pd.read_csv(data_entry_path) bbox_list = pd.read_csv(bbox_list_path) with open(train_txt_path, "r") as f: train_list = [ i.strip() for i in f.readlines()] with open(valid_txt_path, "r") as f: valid_list = [ i.strip() for i in f.readlines()] label_eight = list(np.unique(bbox_list["Finding Label"])) + ["No Finding"] # transform training images print("training example:",len(train_list)) print("take care of your RAM here !!!") train_X = [] for i in range(len(train_list)): image_path = os.path.join(image_folder_path,train_list[i]) img = imageio.imread(image_path) if img.shape != (1024,1024): # there some image with shape (1024,1024,4) in training set img = img[:,:,0] img_resized = skimage.transform.resize(img,(256,256)) # or use img[::4] here train_X.append((np.array(img_resized)/255).reshape(256,256,1)) if i % 3000==0: print(i) train_X = np.array(train_X) np.save(os.path.join(data_path,"train_X_small.npy"), train_X) # transform validation images print("validation example:",len(valid_list)) valid_X = [] for i in range(len(valid_list)): image_path = os.path.join(image_folder_path,valid_list[i]) img = imageio.imread(image_path) if img.shape != (1024,1024): img = img[:,:,0] img_resized = skimage.transform.resize(img,(256,256)) # if img.shape != (1024,1024): # train_X.append(img[:,:,0]) # else: valid_X.append((np.array(img_resized)/255).reshape(256,256,1)) if i % 3000==0: print(i) valid_X = np.array(valid_X) np.save(os.path.join(data_path,"valid_X_small.npy"), valid_X) # process label print("label preprocessing") train_y = [] for train_id in train_list: train_y.append(get_labels(train_id)) valid_y = [] for valid_id in valid_list: valid_y.append(get_labels(valid_id)) encoder = MultiLabelBinarizer() encoder.fit(train_y+valid_y) train_y_onehot = encoder.transform(train_y) valid_y_onehot = encoder.transform(valid_y) train_y_onehot = np.delete(train_y_onehot, [2,3,5,6,7,10,12],1) # delete out 8 and "No Finding" column valid_y_onehot = np.delete(valid_y_onehot, [2,3,5,6,7,10,12],1) # delete out 8 and "No Finding" column with open(data_path + "/train_y_onehot.pkl","wb") as f: pickle.dump(train_y_onehot, f) with open(data_path + "/valid_y_onehot.pkl","wb") as f: pickle.dump(valid_y_onehot, f) with open(data_path + "/label_encoder.pkl","wb") as f: pickle.dump(encoder, f) So this is my code My system configration:Intel i7-7700HQ,16GB Ram,256GB ssd,GTX 1050 4GB Is there a way to split my dataset so and write to the same file again? I'm also posting the error which i got as a screenshot Error From Powershell after executing the code for 30mins I'm also using python3 in my system 64bit version Does spliting the 1,12,120 images and taking them as batches will it work here? If yes how?
Making your own set of MNIST data (identical to MNIST format)
I'm trying to create my own version of MNIST data. I've converted my training and testing data to the following files; test-images-idx3-ubyte.gz test-labels-idx1-ubyte.gz train-images-idx3-ubyte.gz train-labels-idx1-ubyte.gz (For anyone interested I did this using JPG-PNG-to-MNIST-NN-Format which seems to get me close to what I'm aiming for.) However this isn't quite the same as the file type and format of the MNIST data (mnist.pkl.gz). I understand that pkl means the data has been pickled, but I don't really understand the process of pickling the data - is there a specific order to the pickling? Can someone provide code that I should use to pickle my data?
import gzip import os import numpy as np import six from six.moves.urllib import request parent = 'http://yann.lecun.com/exdb/mnist' train_images = 'train-images-idx3-ubyte.gz' train_labels = 'train-labels-idx1-ubyte.gz' test_images = 't10k-images-idx3-ubyte.gz' test_labels = 't10k-labels-idx1-ubyte.gz' num_train = 17010 num_test = 3010 dim = 32*32 def load_mnist(images, labels, num): data = np.zeros(num * dim, dtype=np.uint8).reshape((num, dim)) target = np.zeros(num, dtype=np.uint8).reshape((num, )) with gzip.open(images, 'rb') as f_images,\ gzip.open(labels, 'rb') as f_labels: f_images.read(16) f_labels.read(8) for i in six.moves.range(num): target[i] = ord(f_labels.read(1)) for j in six.moves.range(dim): data[i, j] = ord(f_images.read(1)) return data, target def download_mnist_data(): print('Converting training data...') data_train, target_train = load_mnist(train_images, train_labels, num_train) print('Done') print('Converting test data...') data_test, target_test = load_mnist(test_images, test_labels, num_test) mnist = {} mnist['data'] = np.append(data_train, data_test, axis=0) mnist['target'] = np.append(target_train, target_test, axis=0) print('Done') print('Save output...') with open('mnist.pkl', 'wb') as output: six.moves.cPickle.dump(mnist, output, -1) print('Done') print('Convert completed') def load_mnist_data(): if not os.path.exists('mnist.pkl'): download_mnist_data() with open('mnist.pkl', 'rb') as mnist_pickle: mnist = six.moves.cPickle.load(mnist_pickle) return mnist download_mnist_data()