def main(num_epochs=NUM_EPOCHS): print("Loading data...") dataset = load_data() print("Building model and compiling functions...") output_layer = build_model( input_height=dataset['input_height'], input_width=dataset['input_width'], output_dim=dataset['output_dim'], ) iter_funcs = create_iter_functions( dataset, output_layer, X_tensor_type=T.tensor4, ) print("Starting training...") now = time.time() try: for epoch in train(iter_funcs, dataset): print("Epoch {} of {} took {:.3f}s".format( epoch['number'], num_epochs, time.time() - now)) now = time.time() print(" training loss:\t\t{:.6f}".format(epoch['train_loss'])) print(" validation loss:\t\t{:.6f}".format(epoch['valid_loss'])) print(" validation accuracy:\t\t{:.2f} %%".format( epoch['valid_accuracy'] * 100)) if epoch['number'] >= num_epochs: break except KeyboardInterrupt: pass # Can we do something with final output model? Like show a couple of moves... #test_batch = dataset['X_test'] # Test cases -- for Deuce. Can it keep good hands, break pairs, etc? # NOTE: These cases, and entire training... do *not* include number of draw rounds left. Add that! test_cases = ['As,Ad,4d,3s,2c', 'As,Ks,Qs,Js,Ts', '3h,3s,3d,5c,6d', '3h,4s,3d,5c,6d', '2h,3s,4d,6c,5s', '8s,Ad,Kd,8c,Jd', '8s,Ad,2d,7c,Jd', '2d,7d,8d,9d,4d', '7c,8c,Tc,Js,Qh', '2c,8s,5h,8d,2s', '[8s,9c,8c,Kd,7h]', '[Qh,3h,6c,5s,4s]', '[Jh,Td,9s,Ks,5s]', '[6c,4d,Ts,Jc,6s]', '[4h,8h,2c,7d,3h]', '[2c,Ac,Tc,6d,3d]', '[Ad,3c,Tc,4d,5d]', '3d,Jc,7d,Ac,6s', '7h,Kc,5s,2d,Tc', '5c,6h,Jc,7h,2d', 'Ts,As,3s,2d,4h'] print('looking at some test cases: %s' % test_cases) # Fill in test cases to get to batch size? for i in range(BATCH_SIZE - len(test_cases)): test_cases.append(test_cases[1]) test_batch = np.array([cards_input_from_string(case) for case in test_cases], np.int32) predict_model(output_layer=output_layer, test_batch=test_batch) print('again, the test cases: \n%s' % test_cases) #print(predict(output_layer[x=test_batch])) return output_layer
def main(num_epochs=NUM_EPOCHS, out_file=None): print("Loading data...") dataset = load_data() print("Building model and compiling functions...") sys.stdout.flush() # Helps keep track of output live in re-directed out output_layer = build_model( input_height=dataset['input_height'], input_width=dataset['input_width'], output_dim=dataset['output_dim'], ) # Optionally, load in previous model parameters, from pickle! # NOTE: Network shape must match *exactly* if os.path.isfile(out_file): print('Existing model in file %s. Attempt to load it!' % out_file) all_param_values_from_file = np.load(out_file) print('Loaded values %d' % len(all_param_values_from_file)) lasagne.layers.set_all_param_values(output_layer, all_param_values_from_file) print('Successfully initialized model with previous saved params!') else: print('No existing model file (or skipping intialization) %s' % out_file) #iter_funcs = create_iter_functions( # dataset, # output_layer, # X_tensor_type=T.tensor4, # ) # Define iter functions differently. Since we now want to predict the entire vector. iter_funcs = create_iter_functions_full_output( dataset, output_layer, X_tensor_type=T.tensor4, ) print("Starting training...") now = time.time() try: for epoch in train(iter_funcs, dataset, epoch_switch_adapt=EPOCH_SWITCH_ADAPT): sys.stdout.flush() # Helps keep track of output live in re-directed out print("Epoch {} of {} took {:.3f}s".format( epoch['number'], num_epochs, time.time() - now)) now = time.time() print(" training loss:\t\t{:.6f}".format(epoch['train_loss'])) print(" validation loss:\t\t{:.6f}".format(epoch['valid_loss'])) print(" validation accuracy:\t\t{:.2f} %%".format( epoch['valid_accuracy'] * 100)) # Save model, after every epoch. save_model(out_file=out_file, output_layer=output_layer) if epoch['number'] >= num_epochs: break except KeyboardInterrupt: pass # Can we do something with final output model? Like show a couple of moves... #test_batch = dataset['X_test'] # Test cases -- it keeps the two aces. But can it recognize a straight? A flush? Trips? Draw?? Two pair?? test_cases = ['As,Ad,4d,3s,2c', '6d,7d,8d,9d,Kh', 'Jh,Td,9s,8s,5s', 'As,Ks,Qs,Js,Ts', '3h,3s,3d,5c,6d', '3h,4s,3d,5c,6d', '2h,3s,4d,6c,5s', '8s,Ad,Kd,8c,Jd', '8s,Ad,2d,7c,Jd', '2d,7d,8d,9d,4d', '7c,8c,Tc,Js,Qh', '2c,8s,5h,8d,2s', '6s,5s,Kd,3c,4h', 'As,Ks,Qs,Js,Qc', '[8s,9c,8c,Kd,7h]', '[Qh,3h,6c,5s,4s]', '[Jh,Td,9s,Ks,5s]', '[6c,4d,Ts,Jc,6s]', '[4h,8h,2c,7d,3h]', '[2c,Ac,Tc,6d,3d]', '[Ad,3c,Tc,4d,5d]'] print('looking at some test cases: %s' % test_cases) # Fill in test cases to get to batch size? for i in range(BATCH_SIZE - len(test_cases)): test_cases.append(test_cases[1]) test_batch = np.array([cards_input_from_string(case) for case in test_cases], np.int32) predict_model(output_layer=output_layer, test_batch=test_batch) print('again, the test cases: \n%s' % test_cases) return output_layer
def main(num_epochs=NUM_EPOCHS): print("Loading data...") dataset = load_data() print("Building model and compiling functions...") output_layer = build_model( input_height=dataset['input_height'], input_width=dataset['input_width'], output_dim=dataset['output_dim'], ) iter_funcs = create_iter_functions( dataset, output_layer, X_tensor_type=T.tensor4, ) print("Starting training...") now = time.time() try: for epoch in train(iter_funcs, dataset): print("Epoch {} of {} took {:.3f}s".format(epoch['number'], num_epochs, time.time() - now)) now = time.time() print(" training loss:\t\t{:.6f}".format(epoch['train_loss'])) print(" validation loss:\t\t{:.6f}".format(epoch['valid_loss'])) print(" validation accuracy:\t\t{:.2f} %%".format( epoch['valid_accuracy'] * 100)) if epoch['number'] >= num_epochs: break except KeyboardInterrupt: pass # Can we do something with final output model? Like show a couple of moves... #test_batch = dataset['X_test'] # Test cases -- for Deuce. Can it keep good hands, break pairs, etc? # NOTE: These cases, and entire training... do *not* include number of draw rounds left. Add that! test_cases = [ 'As,Ad,4d,3s,2c', 'As,Ks,Qs,Js,Ts', '3h,3s,3d,5c,6d', '3h,4s,3d,5c,6d', '2h,3s,4d,6c,5s', '8s,Ad,Kd,8c,Jd', '8s,Ad,2d,7c,Jd', '2d,7d,8d,9d,4d', '7c,8c,Tc,Js,Qh', '2c,8s,5h,8d,2s', '[8s,9c,8c,Kd,7h]', '[Qh,3h,6c,5s,4s]', '[Jh,Td,9s,Ks,5s]', '[6c,4d,Ts,Jc,6s]', '[4h,8h,2c,7d,3h]', '[2c,Ac,Tc,6d,3d]', '[Ad,3c,Tc,4d,5d]', '3d,Jc,7d,Ac,6s', '7h,Kc,5s,2d,Tc', '5c,6h,Jc,7h,2d', 'Ts,As,3s,2d,4h' ] print('looking at some test cases: %s' % test_cases) # Fill in test cases to get to batch size? for i in range(BATCH_SIZE - len(test_cases)): test_cases.append(test_cases[1]) test_batch = np.array( [cards_input_from_string(case) for case in test_cases], np.int32) predict_model(output_layer=output_layer, test_batch=test_batch) print('again, the test cases: \n%s' % test_cases) #print(predict(output_layer[x=test_batch])) return output_layer
def main(num_epochs=NUM_EPOCHS): print("Loading data...") dataset = load_data() print("Building model and compiling functions...") output_layer = build_model( input_height=dataset["input_height"], input_width=dataset["input_width"], output_dim=dataset["output_dim"] ) iter_funcs = create_iter_functions(dataset, output_layer, X_tensor_type=T.tensor4) print("Starting training...") now = time.time() try: for epoch in train(iter_funcs, dataset): print("Epoch {} of {} took {:.3f}s".format(epoch["number"], num_epochs, time.time() - now)) now = time.time() print(" training loss:\t\t{:.6f}".format(epoch["train_loss"])) print(" validation loss:\t\t{:.6f}".format(epoch["valid_loss"])) print(" validation accuracy:\t\t{:.2f} %%".format(epoch["valid_accuracy"] * 100)) if epoch["number"] >= num_epochs: break except KeyboardInterrupt: pass # Can we do something with final output model? Like show a couple of moves... # test_batch = dataset['X_test'] # Test cases -- it keeps the two aces. But can it recognize a straight? A flush? Trips? Draw?? Two pair?? test_cases = [ "As,Ad,4d,3s,2c", "As,Ks,Qs,Js,Ts", "3h,3s,3d,5c,6d", "3h,4s,3d,5c,6d", "2h,3s,4d,6c,5s", "8s,Ad,Kd,8c,Jd", "8s,Ad,2d,7c,Jd", "2d,7d,8d,9d,4d", "7c,8c,Tc,Js,Qh", "2c,8s,5h,8d,2s", "[8s,9c,8c,Kd,7h]", "[Qh,3h,6c,5s,4s]", "[Jh,Td,9s,Ks,5s]", "[6c,4d,Ts,Jc,6s]", "[4h,8h,2c,7d,3h]", "[2c,Ac,Tc,6d,3d]", "[Ad,3c,Tc,4d,5d]", ] print("looking at some test cases: %s" % test_cases) # Fill in test cases to get to batch size? for i in range(BATCH_SIZE - len(test_cases)): test_cases.append(test_cases[1]) test_batch = np.array([cards_input_from_string(case) for case in test_cases], np.int32) predict_model(output_layer=output_layer, test_batch=test_batch) print("again, the test cases: \n%s" % test_cases) # print(predict(output_layer[x=test_batch])) return output_layer
def main(num_epochs=NUM_EPOCHS, out_file=None): print("Loading data...") dataset = load_data() print("Building model and compiling functions...") sys.stdout.flush() # Helps keep track of output live in re-directed out output_layer = build_model( input_height=dataset['input_height'], input_width=dataset['input_width'], output_dim=dataset['output_dim'], ) # Optionally, load in previous model parameters, from pickle! # NOTE: Network shape must match *exactly* if os.path.isfile(out_file): print('Existing model in file %s. Attempt to load it!' % out_file) all_param_values_from_file = np.load(out_file) print('Loaded values %d' % len(all_param_values_from_file)) lasagne.layers.set_all_param_values(output_layer, all_param_values_from_file) print('Successfully initialized model with previous saved params!') else: print('No existing model file (or skipping intialization) %s' % out_file) #iter_funcs = create_iter_functions( # dataset, # output_layer, # X_tensor_type=T.tensor4, # ) # Define iter functions differently. Since we now want to predict the entire vector. iter_funcs = create_iter_functions_full_output( dataset, output_layer, X_tensor_type=T.tensor4, ) print("Starting training...") now = time.time() try: for epoch in train(iter_funcs, dataset, epoch_switch_adapt=EPOCH_SWITCH_ADAPT): sys.stdout.flush( ) # Helps keep track of output live in re-directed out print("Epoch {} of {} took {:.3f}s".format(epoch['number'], num_epochs, time.time() - now)) now = time.time() print(" training loss:\t\t{:.6f}".format(epoch['train_loss'])) print(" validation loss:\t\t{:.6f}".format(epoch['valid_loss'])) print(" validation accuracy:\t\t{:.2f} %%".format( epoch['valid_accuracy'] * 100)) # Save model, after every epoch. save_model(out_file=out_file, output_layer=output_layer) if epoch['number'] >= num_epochs: break except KeyboardInterrupt: pass # Can we do something with final output model? Like show a couple of moves... #test_batch = dataset['X_test'] # Test cases -- it keeps the two aces. But can it recognize a straight? A flush? Trips? Draw?? Two pair?? test_cases = [ 'As,Ad,4d,3s,2c', '6d,7d,8d,9d,Kh', 'Jh,Td,9s,8s,5s', 'As,Ks,Qs,Js,Ts', '3h,3s,3d,5c,6d', '3h,4s,3d,5c,6d', '2h,3s,4d,6c,5s', '8s,Ad,Kd,8c,Jd', '8s,Ad,2d,7c,Jd', '2d,7d,8d,9d,4d', '7c,8c,Tc,Js,Qh', '2c,8s,5h,8d,2s', '6s,5s,Kd,3c,4h', 'As,Ks,Qs,Js,Qc', '[8s,9c,8c,Kd,7h]', '[Qh,3h,6c,5s,4s]', '[Jh,Td,9s,Ks,5s]', '[6c,4d,Ts,Jc,6s]', '[4h,8h,2c,7d,3h]', '[2c,Ac,Tc,6d,3d]', '[Ad,3c,Tc,4d,5d]' ] print('looking at some test cases: %s' % test_cases) # Fill in test cases to get to batch size? for i in range(BATCH_SIZE - len(test_cases)): test_cases.append(test_cases[1]) test_batch = np.array( [cards_input_from_string(case) for case in test_cases], np.int32) predict_model(output_layer=output_layer, test_batch=test_batch) print('again, the test cases: \n%s' % test_cases) return output_layer