{"action":"created","comment":{"url":"https://api.github.com/repos/kaldi-asr/kaldi/pulls/comments/81692503","pull_request_review_id":2653221,"id":81692503,"diff_hunk":"@@ -229,69 +265,210 @@ def MakeConfigs(config_dir, feat_dim, ivector_dim, num_targets,\n     nodes.AddOutputLayer(init_config_lines, prev_layer_output)\n     config_files[config_dir + '/init.config'] = init_config_lines\n \n-    prev_layer_output = nodes.AddLdaLayer(config_lines, \"L0\", prev_layer_output, config_dir + '/lda.mat')\n-\n-    for i in range(num_lstm_layers):\n-        if len(lstm_delay[i]) == 2: # add a bi-directional LSTM layer\n-            prev_layer_output = nodes.AddBLstmLayer(config_lines, \"BLstm{0}\".format(i+1),\n-                                                    prev_layer_output, cell_dim,\n-                                                    recurrent_projection_dim, non_recurrent_projection_dim,\n-                                                    clipping_threshold, norm_based_clipping,\n-                                                    ng_per_element_scale_options, ng_affine_options,\n-                                                    lstm_delay = lstm_delay[i], self_repair_scale_nonlinearity = self_repair_scale_nonlinearity, self_repair_scale_clipgradient = self_repair_scale_clipgradient)\n-        else: # add a uni-directional LSTM layer\n-            prev_layer_output = nodes.AddLstmLayer(config_lines, \"Lstm{0}\".format(i+1),\n-                                                   prev_layer_output, cell_dim,\n-                                                   recurrent_projection_dim, non_recurrent_projection_dim,\n-                                                   clipping_threshold, norm_based_clipping,\n-                                                   ng_per_element_scale_options, ng_affine_options,\n-                                                   lstm_delay = lstm_delay[i][0], self_repair_scale_nonlinearity = self_repair_scale_nonlinearity, self_repair_scale_clipgradient = self_repair_scale_clipgradient)\n-        # make the intermediate config file for layerwise discriminative\n-        # training\n-        nodes.AddFinalLayer(config_lines, prev_layer_output, num_targets, ng_affine_options, label_delay = label_delay, include_log_softmax = include_log_softmax)\n-\n-\n-        if xent_regularize != 0.0:\n-            nodes.AddFinalLayer(config_lines, prev_layer_output, num_targets,\n-                                include_log_softmax = True, label_delay = label_delay,\n-                                name_affix = 'xent')\n-\n-        config_files['{0}/layer{1}.config'.format(config_dir, i+1)] = config_lines\n+    prev_layer = nodes.AddLdaLayer(config_lines, \"L0\", prev_layer_output, config_dir + '/lda.mat')\n+    prev_layer_output = prev_layer['output']\n+\n+    # we don't want to add a simple affine layer after input layer as in TDNN only configs,\n+    # so we reduce the number of hidden layers and splice_indexes\n+    splice_indexes = splice_indexes[1:]\n+    num_hidden_layers = num_hidden_layers - 1\n+\n+    num_layers_added = 0\n+    # stacking the TDNN/affine layers before the LSTM layers\n+    for i in range(lstm_start_layer_index):\n+        num_layers_added += 1\n+        # we will just support Relu non-linearities\n+        if splice_indexes[i] == [0]:\n+            # add a normal affine layer\n+            prev_layer = nodes.AddAffRelNormLayer(config_lines, 'Affine{0}'.format(num_layers_added),\n+                                                  prev_layer_output,\n+                                                  hidden_dim,\n+                                                  self_repair_scale = self_repair_scale_nonlinearity,\n+                                                  norm_target_rms = 1.0 if i < num_hidden_layers -1 else final_layer_normalize_target)\n+            prev_layer_output = prev_layer['output']\n+            num_learnable_params = prev_layer['num_learnable_params']\n+        else :\n+            prev_layer = nodes.AddTdnnLayer(config_lines, 'Tdnn{0}'.format(num_layers_added),\n+                                            prev_layer_output,\n+                                            splice_indexes = splice_indexes[i],\n+                                            nonlin_type = 'relu',\n+                                            nonlin_input_dim = hidden_dim,\n+                                            nonlin_output_dim = hidden_dim,\n+                                            self_repair_scale = self_repair_scale_nonlinearity,\n+                                            norm_target_rms = 1.0 if i < num_hidden_layers -1 else final_layer_normalize_target)\n+            prev_layer_output = prev_layer['output']\n+            num_learnable_params = prev_layer['num_learnable_params']\n+\n+        # a final layer is added after each new layer as we are generating\n+        # configs for layer-wise discriminative training\n+        num_params_final, num_params_final_xent = nodes.AddFinalLayerWithXentRegularizer(config_lines,\n+                                                                                         input = prev_layer_output,\n+                                                                                         num_targets = num_targets,\n+                                                                                         use_presoftmax_prior_scale = False,\n+                                                                                         prior_scale_file = None,\n+                                                                                         include_log_softmax = include_log_softmax,\n+                                                                                         self_repair_scale = self_repair_scale_nonlinearity,\n+                                                                                         xent_regularize = xent_regularize,\n+                                                                                         label_delay = label_delay,\n+                                                                                         add_final_sigmoid = False,\n+                                                                                         objective_type='linear')\n+\n+        config_files['{0}/layer{1}.config'.format(config_dir, num_layers_added)] = config_lines\n         config_lines = {'components':[], 'component-nodes':[]}\n \n-    for i in range(num_lstm_layers, num_hidden_layers):\n-        prev_layer_output = nodes.AddAffRelNormLayer(config_lines, \"L{0}\".format(i+1),\n-                                               prev_layer_output, hidden_dim,\n-                                               ng_affine_options, self_repair_scale = self_repair_scale_nonlinearity)\n-        # make the intermediate config file for layerwise discriminative\n-        # training\n-        nodes.AddFinalLayer(config_lines, prev_layer_output, num_targets, ng_affine_options, label_delay = label_delay, include_log_softmax = include_log_softmax)\n \n-        if xent_regularize != 0.0:\n-            nodes.AddFinalLayer(config_lines, prev_layer_output, num_targets,\n-                                include_log_softmax = True, label_delay = label_delay,\n-                                name_affix = 'xent')\n \n-        config_files['{0}/layer{1}.config'.format(config_dir, i+1)] = config_lines\n+    # stacking the LSTM layers\n+    for i in range(lstm_start_layer_index, lstm_start_layer_index + num_lstm_layers):\n+        num_layers_added += 1\n+        if splice_indexes[i] != [0]:\n+            # there is a non-zero splice-indexes at this layer index so we pre-pend a tdnn layer\n+            warnings.warn(\"Adding a TDNN layer before LSTM at layer {l}\"\n+                          \" as splice-indexes are {s} and not 0\".format(l=i, s=','.join(map(lambda x: str(x), splice_indexes[i]))))\n+\n+            prev_layer = nodes.AddTdnnLayer(config_lines, 'Tdnn{0}'.format(num_layers_added),\n+                                            prev_layer_output,\n+                                            splice_indexes = splice_indexes[i],\n+                                            nonlin_type = 'relu',\n+                                            nonlin_input_dim = prev_layer_output['dimension'],\n+                                            nonlin_output_dim = prev_layer_output['dimension'],\n+                                            self_repair_scale = self_repair_scale_nonlinearity,\n+                                            norm_target_rms = 1.0 if i < num_hidden_layers -1 else final_layer_normalize_target)\n+\n+            prev_layer_output = prev_layer['output']\n+            num_learnable_params += prev_layer['num_learnable_params']\n+\n+        lstm_index = i - lstm_start_layer_index\n+        if len(lstm_delay[lstm_index]) == 2: # add a bi-directional LSTM layer\n+            prev_layer = nodes.AddBLstmLayer(config_lines, \"BLstm{0}\".format(num_layers_added),\n+                                             prev_layer_output, cell_dim,\n+                                             recurrent_projection_dim, non_recurrent_projection_dim,\n+                                             clipping_threshold, norm_based_clipping,\n+                                             ng_per_element_scale_options, ng_affine_options,\n+                                             lstm_delay = lstm_delay[lstm_index],\n+                                             self_repair_scale_nonlinearity = self_repair_scale_nonlinearity,\n+                                             self_repair_scale_clipgradient = self_repair_scale_clipgradient)\n+            prev_layer_output = prev_layer['output']\n+            num_learnable_params += prev_layer['num_learnable_params']\n+\n+        else: # add a uni-directional LSTM layer\n+            prev_layer = nodes.AddLstmLayer(config_lines, \"Lstm{0}\".format(num_layers_added),\n+                                            prev_layer_output, cell_dim,\n+                                            recurrent_projection_dim, non_recurrent_projection_dim,\n+                                            clipping_threshold, norm_based_clipping,\n+                                            ng_per_element_scale_options, ng_affine_options,\n+                                            lstm_delay = lstm_delay[lstm_index][0],\n+                                            self_repair_scale_nonlinearity = self_repair_scale_nonlinearity,\n+                                            self_repair_scale_clipgradient = self_repair_scale_clipgradient)\n+            prev_layer_output = prev_layer['output']\n+            num_learnable_params += prev_layer['num_learnable_params']\n+\n+\n+\n+            # a final layer is added after each new layer as we are generating\n+            # configs for layer-wise discriminative training\n+            num_params_final, num_params_final_xent = nodes.AddFinalLayerWithXentRegularizer(config_lines,\n+                                                                                             input = prev_layer_output,\n+                                                                                             num_targets = num_targets,\n+                                                                                             use_presoftmax_prior_scale = False,\n+                                                                                             prior_scale_file = None,\n+                                                                                             include_log_softmax = include_log_softmax,\n+                                                                                             self_repair_scale = self_repair_scale_nonlinearity,\n+                                                                                             xent_regularize = xent_regularize,\n+                                                                                             label_delay = label_delay,\n+                                                                                             objective_type = 'linear',\n+                                                                                             add_final_sigmoid = False)\n+\n+\n+        config_files['{0}/layer{1}.config'.format(config_dir, num_layers_added)] = config_lines\n+        config_lines = {'components':[], 'component-nodes':[]}\n+\n+    # stacking TDNN/affine layers after the LSTM layers\n+    for i in range(lstm_start_layer_index + num_lstm_layers, num_hidden_layers):\n+        num_layers_added += 1\n+        if xent_separate_forward_affine and i == num_hidden_layers - 1:\n+            # xent_separate_forward_affine is only honored only when adding the final hidden layer\n+            # this is the final layer so assert that splice index is [0]\n+            assert(splice_indexes[i] == [0])\n+            if xent_regularize == 0.0:\n+                raise Exception(\"xent-separate-forward-affine=True is valid only if xent-regularize is non-zero\")\n+\n+            # we use named arguments as we do not want argument offset errors\n+            num_params_final, num_params_final_xent = nodes.AddFinalLayersWithXentSeperateForwardAffineRegularizer(config_lines,\n+                                                                                                                   input = prev_layer_output,\n+                                                                                                                   num_targets = num_targets,\n+                                                                                                                   nonlin_type = 'relu',\n+                                                                                                                   nonlin_input_dim = hidden_dim,\n+                                                                                                                   nonlin_output_dim = hidden_dim,\n+                                                                                                                   use_presoftmax_prior_scale = False,\n+                                                                                                                   prior_scale_file = None,\n+                                                                                                                   include_log_softmax = include_log_softmax,\n+                                                                                                                   self_repair_scale = self_repair_scale_nonlinearity,\n+                                                                                                                   xent_regularize = xent_regularize,\n+                                                                                                                   label_delay = label_delay,\n+                                                                                                                   final_layer_normalize_target = final_layer_normalize_target)\n+        else:\n+            # we will just support Relu non-linearities\n+            if splice_indexes[i] == [0]:\n+                # add a normal affine layer\n+                prev_layer = nodes.AddAffRelNormLayer(config_lines, 'Affine{0}'.format(num_layers_added),\n+                                                      prev_layer_output,\n+                                                      hidden_dim,\n+                                                      self_repair_scale = self_repair_scale_nonlinearity,\n+                                                      norm_target_rms = 1.0 if i < num_hidden_layers -1 else final_layer_normalize_target)\n+                prev_layer_output = prev_layer['output']\n+                num_learnable_params = prev_layer['num_learnable_params']\n+            else :\n+                prev_layer = nodes.AddTdnnLayer(config_lines, 'Tdnn{0}'.format(num_layers_added),\n+                                                prev_layer_output,\n+                                                splice_indexes = splice_indexes[i],\n+                                                nonlin_type = 'relu',\n+                                                nonlin_input_dim = hidden_dim,\n+                                                nonlin_output_dim = hidden_dim,\n+                                                self_repair_scale = self_repair_scale_nonlinearity,\n+                                                norm_target_rms = 1.0 if i < num_hidden_layers -1 else final_layer_normalize_target)\n+                prev_layer_output = prev_layer['output']\n+                num_learnable_params = prev_layer['num_learnable_params']\n+\n+            # a final layer is added after each new layer as we are generating\n+            # configs for layer-wise discriminative training\n+            num_params_final, num_params_final_xent = nodes.AddFinalLayerWithXentRegularizer(config_lines,\n+                                                                                             input = prev_layer_output,\n+                                                                                             num_targets = num_targets,\n+                                                                                             use_presoftmax_prior_scale = False,\n+                                                                                             prior_scale_file = None,\n+                                                                                             include_log_softmax = include_log_softmax,\n+                                                                                             self_repair_scale = self_repair_scale_nonlinearity,\n+                                                                                             xent_regularize = xent_regularize,\n+                                                                                             label_delay = label_delay,\n+                                                                                             add_final_sigmoid = False,\n+                                                                                             objective_type='linear')\n+\n+        config_files['{0}/layer{1}.config'.format(config_dir, num_layers_added)] = config_lines\n         config_lines = {'components':[], 'component-nodes':[]}\n \n+    num_learnable_params += num_params_final\n+    num_learnable_params_xent = num_params_final_xent\n+\n     # printing out the configs\n     # init.config used to train lda-mllt train\n     for key in config_files.keys():\n         PrintConfig(key, config_files[key])\n \n+    print('This model has num_learnable_params={0:,} and num_learnable_params_xent={1:,}'.format(num_learnable_params, num_learnable_params_xent))\n \n \n-\n-def ProcessSpliceIndexes(config_dir, splice_indexes, label_delay, num_lstm_layers):\n+def ProcessSpliceIndexes(config_dir, splice_indexes, label_delay, num_lstm_layers, lstm_start_layer_index):\n     parsed_splice_output = ParseSpliceString(splice_indexes.strip(), label_delay)\n     left_context = parsed_splice_output['left_context']\n     right_context = parsed_splice_output['right_context']\n     num_hidden_layers = parsed_splice_output['num_hidden_layers']\n     splice_indexes = parsed_splice_output['splice_indexes']\n \n-    if (num_hidden_layers < num_lstm_layers):\n-        raise Exception(\"num-lstm-layers : number of lstm layers has to be greater than number of layers, decided based on splice-indexes\")\n+\n+    if (num_hidden_layers < lstm_start_layer_index + num_lstm_layers):\n+        raise Exception(\"num-lstm-layers : (number of lstm layers + lstm start layer index) \"\n+                        \" has to be greater than number of layers, decided based on splice-indexes\")","path":"egs/wsj/s5/steps/nnet3/lstm/make_configs.py","position":419,"original_position":419,"commit_id":"989654a48c1530daf93add00aba343b6f3700f62","original_commit_id":"989654a48c1530daf93add00aba343b6f3700f62","user":{"login":"freewym","id":3506322,"avatar_url":"https://avatars.githubusercontent.com/u/3506322?v=3","gravatar_id":"","url":"https://api.github.com/users/freewym","html_url":"https://github.com/freewym","followers_url":"https://api.github.com/users/freewym/followers","following_url":"https://api.github.com/users/freewym/following{/other_user}","gists_url":"https://api.github.com/users/freewym/gists{/gist_id}","starred_url":"https://api.github.com/users/freewym/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/freewym/subscriptions","organizations_url":"https://api.github.com/users/freewym/orgs","repos_url":"https://api.github.com/users/freewym/repos","events_url":"https://api.github.com/users/freewym/events{/privacy}","received_events_url":"https://api.github.com/users/freewym/received_events","type":"User","site_admin":false},"body":"\"has to be smaller than...\"","created_at":"2016-10-04T06:30:56Z","updated_at":"2016-10-04T06:31:49Z","html_url":"https://github.com/kaldi-asr/kaldi/pull/1092#discussion_r81692503","pull_request_url":"https://api.github.com/repos/kaldi-asr/kaldi/pulls/1092","_links":{"self":{"href":"https://api.github.com/repos/kaldi-asr/kaldi/pulls/comments/81692503"},"html":{"href":"https://github.com/kaldi-asr/kaldi/pull/1092#discussion_r81692503"},"pull_request":{"href":"https://api.github.com/repos/kaldi-asr/kaldi/pulls/1092"}}},"pull_request":{"url":"https://api.github.com/repos/kaldi-asr/kaldi/pulls/1092","id":87807767,"html_url":"https://github.com/kaldi-asr/kaldi/pull/1092","diff_url":"https://github.com/kaldi-asr/kaldi/pull/1092.diff","patch_url":"https://github.com/kaldi-asr/kaldi/pull/1092.patch","issue_url":"https://api.github.com/repos/kaldi-asr/kaldi/issues/1092","number":1092,"state":"open","locked":false,"title":"WIP : nnet3 & python : rewrote the components.py and tdnn/lstm config gener…","user":{"login":"vijayaditya","id":3895456,"avatar_url":"https://avatars.githubusercontent.com/u/3895456?v=3","gravatar_id":"","url":"https://api.github.com/users/vijayaditya","html_url":"https://github.com/vijayaditya","followers_url":"https://api.github.com/users/vijayaditya/followers","following_url":"https://api.github.com/users/vijayaditya/following{/other_user}","gists_url":"https://api.github.com/users/vijayaditya/gists{/gist_id}","starred_url":"https://api.github.com/users/vijayaditya/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vijayaditya/subscriptions","organizations_url":"https://api.github.com/users/vijayaditya/orgs","repos_url":"https://api.github.com/users/vijayaditya/repos","events_url":"https://api.github.com/users/vijayaditya/events{/privacy}","received_events_url":"https://api.github.com/users/vijayaditya/received_events","type":"User","site_admin":false},"body":"…ators.\r\n\r\n1. We ensure lstm and tdnn config generators are similar to each other i.e., xent-separate-forward-affine is supported in both architectures.\r\n2. We print the number of learnable parameters in the main branch of the network and xent branch\r\n\r\n\r\nTesting in progress.","created_at":"2016-10-03T23:02:34Z","updated_at":"2016-10-04T06:31:49Z","closed_at":null,"merged_at":null,"merge_commit_sha":"15e6f427a24e83e021e54e5d864f6921a735ff29","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/kaldi-asr/kaldi/pulls/1092/commits","review_comments_url":"https://api.github.com/repos/kaldi-asr/kaldi/pulls/1092/comments","review_comment_url":"https://api.github.com/repos/kaldi-asr/kaldi/pulls/comments{/number}","comments_url":"https://api.github.com/repos/kaldi-asr/kaldi/issues/1092/comments","statuses_url":"https://api.github.com/repos/kaldi-asr/kaldi/statuses/989654a48c1530daf93add00aba343b6f3700f62","head":{"label":"vijayaditya:nnet3_python_refactor","ref":"nnet3_python_refactor","sha":"989654a48c1530daf93add00aba343b6f3700f62","user":{"login":"vijayaditya","id":3895456,"avatar_url":"https://avatars.githubusercontent.com/u/3895456?v=3","gravatar_id":"","url":"https://api.github.com/users/vijayaditya","html_url":"https://github.com/vijayaditya","followers_url":"https://api.github.com/users/vijayaditya/followers","following_url":"https://api.github.com/users/vijayaditya/following{/other_user}","gists_url":"https://api.github.com/users/vijayaditya/gists{/gist_id}","starred_url":"https://api.github.com/users/vijayaditya/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vijayaditya/subscriptions","organizations_url":"https://api.github.com/users/vijayaditya/orgs","repos_url":"https://api.github.com/users/vijayaditya/repos","events_url":"https://api.github.com/users/vijayaditya/events{/privacy}","received_events_url":"https://api.github.com/users/vijayaditya/received_events","type":"User","site_admin":false},"repo":{"id":39489479,"name":"kaldi","full_name":"vijayaditya/kaldi","owner":{"login":"vijayaditya","id":3895456,"avatar_url":"https://avatars.githubusercontent.com/u/3895456?v=3","gravatar_id":"","url":"https://api.github.com/users/vijayaditya","html_url":"https://github.com/vijayaditya","followers_url":"https://api.github.com/users/vijayaditya/followers","following_url":"https://api.github.com/users/vijayaditya/following{/other_user}","gists_url":"https://api.github.com/users/vijayaditya/gists{/gist_id}","starred_url":"https://api.github.com/users/vijayaditya/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vijayaditya/subscriptions","organizations_url":"https://api.github.com/users/vijayaditya/orgs","repos_url":"https://api.github.com/users/vijayaditya/repos","events_url":"https://api.github.com/users/vijayaditya/events{/privacy}","received_events_url":"https://api.github.com/users/vijayaditya/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/vijayaditya/kaldi","description":"This is now the official location of the Kaldi project.","fork":true,"url":"https://api.github.com/repos/vijayaditya/kaldi","forks_url":"https://api.github.com/repos/vijayaditya/kaldi/forks","keys_url":"https://api.github.com/repos/vijayaditya/kaldi/keys{/key_id}","collaborators_url":"https://api.github.com/repos/vijayaditya/kaldi/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/vijayaditya/kaldi/teams","hooks_url":"https://api.github.com/repos/vijayaditya/kaldi/hooks","issue_events_url":"https://api.github.com/repos/vijayaditya/kaldi/issues/events{/number}","events_url":"https://api.github.com/repos/vijayaditya/kaldi/events","assignees_url":"https://api.github.com/repos/vijayaditya/kaldi/assignees{/user}","branches_url":"https://api.github.com/repos/vijayaditya/kaldi/branches{/branch}","tags_url":"https://api.github.com/repos/vijayaditya/kaldi/tags","blobs_url":"https://api.github.com/repos/vijayaditya/kaldi/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/vijayaditya/kaldi/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/vijayaditya/kaldi/git/refs{/sha}","trees_url":"https://api.github.com/repos/vijayaditya/kaldi/git/trees{/sha}","statuses_url":"https://api.github.com/repos/vijayaditya/kaldi/statuses/{sha}","languages_url":"https://api.github.com/repos/vijayaditya/kaldi/languages","stargazers_url":"https://api.github.com/repos/vijayaditya/kaldi/stargazers","contributors_url":"https://api.github.com/repos/vijayaditya/kaldi/contributors","subscribers_url":"https://api.github.com/repos/vijayaditya/kaldi/subscribers","subscription_url":"https://api.github.com/repos/vijayaditya/kaldi/subscription","commits_url":"https://api.github.com/repos/vijayaditya/kaldi/commits{/sha}","git_commits_url":"https://api.github.com/repos/vijayaditya/kaldi/git/commits{/sha}","comments_url":"https://api.github.com/repos/vijayaditya/kaldi/comments{/number}","issue_comment_url":"https://api.github.com/repos/vijayaditya/kaldi/issues/comments{/number}","contents_url":"https://api.github.com/repos/vijayaditya/kaldi/contents/{+path}","compare_url":"https://api.github.com/repos/vijayaditya/kaldi/compare/{base}...{head}","merges_url":"https://api.github.com/repos/vijayaditya/kaldi/merges","archive_url":"https://api.github.com/repos/vijayaditya/kaldi/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/vijayaditya/kaldi/downloads","issues_url":"https://api.github.com/repos/vijayaditya/kaldi/issues{/number}","pulls_url":"https://api.github.com/repos/vijayaditya/kaldi/pulls{/number}","milestones_url":"https://api.github.com/repos/vijayaditya/kaldi/milestones{/number}","notifications_url":"https://api.github.com/repos/vijayaditya/kaldi/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/vijayaditya/kaldi/labels{/name}","releases_url":"https://api.github.com/repos/vijayaditya/kaldi/releases{/id}","deployments_url":"https://api.github.com/repos/vijayaditya/kaldi/deployments","created_at":"2015-07-22T06:27:44Z","updated_at":"2016-01-12T01:00:11Z","pushed_at":"2016-10-04T04:00:15Z","git_url":"git://github.com/vijayaditya/kaldi.git","ssh_url":"git@github.com:vijayaditya/kaldi.git","clone_url":"https://github.com/vijayaditya/kaldi.git","svn_url":"https://github.com/vijayaditya/kaldi","homepage":"http://kaldi-asr.org","size":103509,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"kaldi-asr:master","ref":"master","sha":"a91869927cb4dc0449d0f7931360092a6994e128","user":{"login":"kaldi-asr","id":11650082,"avatar_url":"https://avatars.githubusercontent.com/u/11650082?v=3","gravatar_id":"","url":"https://api.github.com/users/kaldi-asr","html_url":"https://github.com/kaldi-asr","followers_url":"https://api.github.com/users/kaldi-asr/followers","following_url":"https://api.github.com/users/kaldi-asr/following{/other_user}","gists_url":"https://api.github.com/users/kaldi-asr/gists{/gist_id}","starred_url":"https://api.github.com/users/kaldi-asr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kaldi-asr/subscriptions","organizations_url":"https://api.github.com/users/kaldi-asr/orgs","repos_url":"https://api.github.com/users/kaldi-asr/repos","events_url":"https://api.github.com/users/kaldi-asr/events{/privacy}","received_events_url":"https://api.github.com/users/kaldi-asr/received_events","type":"Organization","site_admin":false},"repo":{"id":34275045,"name":"kaldi","full_name":"kaldi-asr/kaldi","owner":{"login":"kaldi-asr","id":11650082,"avatar_url":"https://avatars.githubusercontent.com/u/11650082?v=3","gravatar_id":"","url":"https://api.github.com/users/kaldi-asr","html_url":"https://github.com/kaldi-asr","followers_url":"https://api.github.com/users/kaldi-asr/followers","following_url":"https://api.github.com/users/kaldi-asr/following{/other_user}","gists_url":"https://api.github.com/users/kaldi-asr/gists{/gist_id}","starred_url":"https://api.github.com/users/kaldi-asr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kaldi-asr/subscriptions","organizations_url":"https://api.github.com/users/kaldi-asr/orgs","repos_url":"https://api.github.com/users/kaldi-asr/repos","events_url":"https://api.github.com/users/kaldi-asr/events{/privacy}","received_events_url":"https://api.github.com/users/kaldi-asr/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/kaldi-asr/kaldi","description":"This is now the official location of the Kaldi project.","fork":false,"url":"https://api.github.com/repos/kaldi-asr/kaldi","forks_url":"https://api.github.com/repos/kaldi-asr/kaldi/forks","keys_url":"https://api.github.com/repos/kaldi-asr/kaldi/keys{/key_id}","collaborators_url":"https://api.github.com/repos/kaldi-asr/kaldi/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/kaldi-asr/kaldi/teams","hooks_url":"https://api.github.com/repos/kaldi-asr/kaldi/hooks","issue_events_url":"https://api.github.com/repos/kaldi-asr/kaldi/issues/events{/number}","events_url":"https://api.github.com/repos/kaldi-asr/kaldi/events","assignees_url":"https://api.github.com/repos/kaldi-asr/kaldi/assignees{/user}","branches_url":"https://api.github.com/repos/kaldi-asr/kaldi/branches{/branch}","tags_url":"https://api.github.com/repos/kaldi-asr/kaldi/tags","blobs_url":"https://api.github.com/repos/kaldi-asr/kaldi/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/kaldi-asr/kaldi/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/kaldi-asr/kaldi/git/refs{/sha}","trees_url":"https://api.github.com/repos/kaldi-asr/kaldi/git/trees{/sha}","statuses_url":"https://api.github.com/repos/kaldi-asr/kaldi/statuses/{sha}","languages_url":"https://api.github.com/repos/kaldi-asr/kaldi/languages","stargazers_url":"https://api.github.com/repos/kaldi-asr/kaldi/stargazers","contributors_url":"https://api.github.com/repos/kaldi-asr/kaldi/contributors","subscribers_url":"https://api.github.com/repos/kaldi-asr/kaldi/subscribers","subscription_url":"https://api.github.com/repos/kaldi-asr/kaldi/subscription","commits_url":"https://api.github.com/repos/kaldi-asr/kaldi/commits{/sha}","git_commits_url":"https://api.github.com/repos/kaldi-asr/kaldi/git/commits{/sha}","comments_url":"https://api.github.com/repos/kaldi-asr/kaldi/comments{/number}","issue_comment_url":"https://api.github.com/repos/kaldi-asr/kaldi/issues/comments{/number}","contents_url":"https://api.github.com/repos/kaldi-asr/kaldi/contents/{+path}","compare_url":"https://api.github.com/repos/kaldi-asr/kaldi/compare/{base}...{head}","merges_url":"https://api.github.com/repos/kaldi-asr/kaldi/merges","archive_url":"https://api.github.com/repos/kaldi-asr/kaldi/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/kaldi-asr/kaldi/downloads","issues_url":"https://api.github.com/repos/kaldi-asr/kaldi/issues{/number}","pulls_url":"https://api.github.com/repos/kaldi-asr/kaldi/pulls{/number}","milestones_url":"https://api.github.com/repos/kaldi-asr/kaldi/milestones{/number}","notifications_url":"https://api.github.com/repos/kaldi-asr/kaldi/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/kaldi-asr/kaldi/labels{/name}","releases_url":"https://api.github.com/repos/kaldi-asr/kaldi/releases{/id}","deployments_url":"https://api.github.com/repos/kaldi-asr/kaldi/deployments","created_at":"2015-04-20T17:23:16Z","updated_at":"2016-10-03T17:28:22Z","pushed_at":"2016-10-04T04:36:00Z","git_url":"git://github.com/kaldi-asr/kaldi.git","ssh_url":"git@github.com:kaldi-asr/kaldi.git","clone_url":"https://github.com/kaldi-asr/kaldi.git","svn_url":"https://github.com/kaldi-asr/kaldi","homepage":"http://kaldi-asr.org","size":138673,"stargazers_count":1027,"watchers_count":1027,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":578,"mirror_url":null,"open_issues_count":86,"forks":578,"open_issues":86,"watchers":1027,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/kaldi-asr/kaldi/pulls/1092"},"html":{"href":"https://github.com/kaldi-asr/kaldi/pull/1092"},"issue":{"href":"https://api.github.com/repos/kaldi-asr/kaldi/issues/1092"},"comments":{"href":"https://api.github.com/repos/kaldi-asr/kaldi/issues/1092/comments"},"review_comments":{"href":"https://api.github.com/repos/kaldi-asr/kaldi/pulls/1092/comments"},"review_comment":{"href":"https://api.github.com/repos/kaldi-asr/kaldi/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/kaldi-asr/kaldi/pulls/1092/commits"},"statuses":{"href":"https://api.github.com/repos/kaldi-asr/kaldi/statuses/989654a48c1530daf93add00aba343b6f3700f62"}}}}
{"actor":{"display_login":"freewym"}}