static void Main(string[] args) { string testDbPath = @"c:\Users\unbornchikken\Documents\x\Gender\T_gender_20x24.pdb.pat"; string trainingDbPath = @"c:\Users\unbornchikken\Documents\x\Gender\L_gender_20x24.pdb.pat"; int count = 0; int freq = 1000; using (var testFile = File.OpenRead(testDbPath)) using (var trainingFile = File.OpenRead(trainingDbPath)) using (var ctx = new GenderEntities()) { var list = new LinkedList<Item>(); ctx.DeleteAll(); var testReader = new RawGenderItemReader(testFile, false); var trainingReader = new RawGenderItemReader(trainingFile, true); int all = testReader.ItemCount + trainingReader.ItemCount; foreach (var item in testReader.ReadItems().Concat(trainingReader.ReadItems())) { ctx.AddToItems(item); list.AddLast(item); if (++count % freq == 0) { Console.WriteLine("{0} / {1}", count, all); ctx.SaveChanges(); Detach(ctx, list); } } ctx.SaveChanges(); } Console.ReadKey(); }
public override Script this[int index] { get { Contract.Requires(index >= 0 && index < Count); if (indexMap.Count != Count) throw new InvalidOperationException("Gender Script provider is not initialized."); using (var ctx = new GenderEntities()) { index = indexMap[index]; var item = ctx.Items.Where(i => i.ID == index).First(); return CreateScript(item); } } }
public override IEnumerable<Script> GetScripts(ISet<int> indexes) { if (indexMap.Count != Count) throw new InvalidOperationException("Gender Script provider is not initialized."); int miIdx = 0; var mappedIndexes = new int[indexes.Count]; foreach (int index in indexes) { mappedIndexes[miIdx++] = indexMap[index]; } using (var ctx = new GenderEntities()) { var q = ctx.Items.Where(i => mappedIndexes.Contains(i.ID)); foreach (var item in q) { yield return CreateScript(item); } } }
public void Update() { using (var ctx = new GenderEntities()) { ObjectQuery<Item> q = null; if (TestSetType == GenderTestSet.All) q = ctx.Items; else if (TestSetType == GenderTestSet.Training) q = (ObjectQuery<Item>)ctx.Items.Where(i => i.IsTrainingPattern); else if (TestSetType == GenderTestSet.Validation) q = (ObjectQuery<Item>)ctx.Items.Where(i => !i.IsTrainingPattern); var result = q.Execute(MergeOption.NoTracking); int count = 0; int passed = 0; int failed = 0; foreach (var item in result) { bool gender = Computation.ComputeGender(item.Pixels); if (gender == item.Gender) passed++; else failed++; count++; } TestedItems = count; PassedItems = passed; FailedItems = failed; } }
private static void Detach(GenderEntities ctx, LinkedList<Item> list) { foreach (var item in list) ctx.Items.Detach(item); list.Clear(); }
public override void Reinitialize() { indexMap.Clear(); using (var ctx = new GenderEntities()) { var q = isTraining ? ctx.Items.Where(i => i.IsTrainingPattern) : ctx.Items.Where(i => !i.IsTrainingPattern); var dbIdxEnum = q.Select(i => i.ID).AsEnumerable().OrderByRandom().GetEnumerator(); for (int idx = 0; idx < count && dbIdxEnum.MoveNext(); idx++) { indexMap.Add(idx, dbIdxEnum.Current); } count = indexMap.Count; } if (isTraining) Console.WriteLine("Training reinitialized."); else Console.WriteLine("Validation reinitialized."); }