def attention_map(self, text): """ Text to visualze attention map for. """ # encode the string d = self.input_vocab.string_to_int(text) print('d: ', d) # get the output sequence predicted_text = run_example(self.pred_model, self.input_vocab, self.output_vocab, text) print('predicted_text: ', predicted_text) text_ = list(text) + ['<eot>'] + ['<unk>'] * self.input_vocab.padding # get the lengths of the string input_length = len(text)+1 output_length = predicted_text.index('<eot>')+1 # get the activation map activation_map = np.squeeze(self.proba_model.predict(np.array([d])))[0:output_length, 0:input_length] print('activation_map: ', activation_map) # [[1.04707105e-05 1.22802967e-05 8.08871482e-06 2.06340337e-05 # 9.13377789e-06 8.17141245e-06 2.89358250e-05 1.30348863e-05 # 3.70874773e-06 1.70587246e-05 7.16923250e-06 4.97975234e-05 # 4.53671564e-05 2.57728461e-05 2.45305255e-05 3.59793594e-05 # 1.75800902e-04 3.21106811e-04 2.58878747e-04 9.57598037e-04] # [2.88392557e-03 2.04139692e-03 8.94600758e-04 1.82232610e-03 # ... # import seaborn as sns plt.clf() f = plt.figure(figsize=(8, 8.5)) ax = f.add_subplot(1, 1, 1) # add image i = ax.imshow(activation_map, interpolation='nearest', cmap='gray') #weight값을 회색으로 표시... # add colorbar cbaxes = f.add_axes([0.2, 0, 0.6, 0.03]) cbar = f.colorbar(i, cax=cbaxes, orientation='horizontal') cbar.ax.set_xlabel('Probability', labelpad=2) # add labels ax.set_yticks(range(output_length)) ax.set_yticklabels(predicted_text[:output_length]) ax.set_xticks(range(input_length)) ax.set_xticklabels(text_[:input_length], rotation=45) ax.set_xlabel('Input Sequence') ax.set_ylabel('Output Sequence') # add grid and legend ax.grid() # ax.legend(loc='best') f.savefig(os.path.join(HERE, 'attention_maps', text.replace('/', '')+'.pdf'), bbox_inches='tight') f.show()
def attention_map(self, text): """ Text to visualze attention map for. """ # encode the string d = self.input_vocab.string_to_int(text) # get the output sequence predicted_text = run_example(self.pred_model, self.input_vocab, self.output_vocab, text) text_ = list(text) + ['<eot>'] + ['<unk>'] * self.input_vocab.padding # get the lengths of the string input_length = len(text) + 1 output_length = predicted_text.index('<eot>') + 1 # get the activation map activation_map = np.squeeze(self.proba_model.predict(np.array( [d])))[0:output_length, 0:input_length] # import seaborn as sns plt.clf() f = plt.figure(figsize=(8, 8.5)) ax = f.add_subplot(1, 1, 1) # add image i = ax.imshow(activation_map, interpolation='nearest', cmap='gray') # add colorbar cbaxes = f.add_axes([0.2, 0, 0.6, 0.03]) cbar = f.colorbar(i, cax=cbaxes, orientation='horizontal') cbar.ax.set_xlabel('Probability', labelpad=2) # add labels ax.set_yticks(range(output_length)) ax.set_yticklabels(predicted_text[:output_length]) ax.set_xticks(range(input_length)) ax.set_xticklabels(text_[:input_length], rotation=45) ax.set_xlabel('Input Sequence') ax.set_ylabel('Output Sequence') # add grid and legend ax.grid() # ax.legend(loc='best') f.savefig(os.path.join(HERE, 'attention_maps', text.replace('/', '') + '.pdf'), bbox_inches='tight') f.show()
def attention_map(self, text): """ Text to visualze attention map for. """ # encode the string d = self.input_vocab.string_to_int(text) # get the output sequence predicted_text = run_example( self.pred_model, self.input_vocab, self.output_vocab, text) text_ = list(text) + ['<eot>'] + ['<unk>'] * self.input_vocab.padding # get the lengths of the string input_length = len(text)+1 output_length = predicted_text.index('<eot>')+1 # get the activation map activation_map = np.squeeze(self.proba_model.predict(np.array([d])))[ 0:output_length, 0:input_length] # import seaborn as sns plt.clf() f = plt.figure(figsize=(8, 8.5)) ax = f.add_subplot(1, 1, 1) # add image i = ax.imshow(activation_map, interpolation='nearest', cmap='gray') # add colorbar cbaxes = f.add_axes([0.2, 0, 0.6, 0.03]) cbar = f.colorbar(i, cax=cbaxes, orientation='horizontal') cbar.ax.set_xlabel('Probability', labelpad=2) # add labels ax.set_yticks(range(output_length)) ax.set_yticklabels(predicted_text[:output_length]) ax.set_xticks(range(input_length)) ax.set_xticklabels(text_[:input_length], rotation=45) ax.set_xlabel('Input Sequence') ax.set_ylabel('Output Sequence') # add grid and legend ax.grid() # ax.legend(loc='best') f.savefig(os.path.join(HERE, 'attention_maps', text.replace('/', '')+'.pdf'), bbox_inches='tight') f.show()