def testMergeTensorValuesSparseOriginalsUnmodified(self): value1 = tf.compat.v1.SparseTensorValue( indices=np.array([]).reshape([0, 2]), values=np.array([]).reshape([0, 1]), dense_shape=np.array([1, 4])) value2 = tf.compat.v1.SparseTensorValue( indices=np.array([]).reshape([0, 2]), values=np.array([]).reshape([0, 1]), dense_shape=np.array([1, 4])) merged_tensor_values = util.merge_tensor_values( tensor_values=[value1, value2]) # Check that the original SparseTensorValues were not mutated. self.assertSparseTensorValueEqual( tf.compat.v1.SparseTensorValue(indices=np.array([]).reshape([0, 2]), values=np.array([]).reshape([0, 1]), dense_shape=np.array([1, 4])), value1) self.assertSparseTensorValueEqual( tf.compat.v1.SparseTensorValue(indices=np.array([]).reshape([0, 2]), values=np.array([]).reshape([0, 1]), dense_shape=np.array([1, 4])), value2) # Check the merged SparseTensorValue. self.assertSparseTensorValueEqual( tf.compat.v1.SparseTensorValue(indices=np.array([]).reshape([0, 2]), values=np.array([]).reshape([0, 1]), dense_shape=np.array([2, 4])), merged_tensor_values)
def testMergeTensorValueDense(self): merged_tensor_values = util.merge_tensor_values(tensor_values=[ np.ndarray(shape=(1, 2), buffer=np.array([1, 2])), np.ndarray(shape=(1, 2), buffer=np.array([3, 4])), np.ndarray(shape=(1, 2), buffer=np.array([5, 6])), ]) self.assertAllEqual( np.ndarray(shape=(3, 2), buffer=np.array([1, 2, 3, 4, 5, 6])), merged_tensor_values)
def _create_feed_for_features_predictions_labels_list( self, features_predictions_labels_list): """Create feed list for feeding a list of features, predictions, labels.""" result = [] for which_map, key, _ in self._iterate_fpl_maps_in_canonical_order(): result.append( util.merge_tensor_values([ getattr(fpl, which_map)[key][encoding.NODE_SUFFIX] for fpl in features_predictions_labels_list ])) return result
def _create_feed_for_features_predictions_labels_list( self, features_predictions_labels_list): """Create feed dict for feeding a list of features, predictions, labels.""" result = {} for label_key, label_dict in self._labels_map.items(): result[label_dict[ encoding.NODE_SUFFIX]] = util.merge_tensor_values([ fpl.labels[label_key][encoding.NODE_SUFFIX] for fpl in features_predictions_labels_list ]) for feature_key, feature_dict in self._features_map.items(): result[feature_dict[ encoding.NODE_SUFFIX]] = util.merge_tensor_values([ fpl.features[feature_key][encoding.NODE_SUFFIX] for fpl in features_predictions_labels_list ]) for prediction_key, prediction_dict in self._predictions_map.items(): result[prediction_dict[encoding.NODE_SUFFIX]] = ( util.merge_tensor_values([ fpl.predictions[prediction_key][encoding.NODE_SUFFIX] for fpl in features_predictions_labels_list ])) return result
def testMergeTensorValueDenseDifferentShapesStrings(self): merged_tensor_values = util.merge_tensor_values(tensor_values=[ np.array([[['apple'], ['banana']]]), np.array([[['cherry', 'date', 'elderberry']]]), np.array([[['fig', 'guava'], ['honeydew', 'imbe'], ['jackfruit', 'kiwi']]]) ]) self.assertAllEqual( np.array([ # Row 0 [['apple', '', ''], ['banana', '', ''], ['', '', '']], # Row 1 [['cherry', 'date', 'elderberry'], ['', '', ''], ['', '', '']], # Row 2 [['fig', 'guava', ''], ['honeydew', 'imbe', ''], ['jackfruit', 'kiwi', '']] ]), merged_tensor_values)
def testMergeTensorValueSparse(self): merged_tensor_values = util.merge_tensor_values(tensor_values=[ tf.SparseTensorValue(indices=np.array([[0, 0], [0, 1]]), values=np.array([1, 2]), dense_shape=np.array([1, 2])), tf.SparseTensorValue(indices=np.array([[0, 0], [0, 1]]), values=np.array([3, 4]), dense_shape=np.array([1, 2])), tf.SparseTensorValue(indices=np.array([[0, 0], [0, 1]]), values=np.array([5, 6]), dense_shape=np.array([1, 2])), ]) self.assertSparseTensorValueEqual( tf.SparseTensorValue(indices=np.array([[0, 0], [0, 1], [1, 0], [1, 1], [2, 0], [2, 1]]), values=np.array([1, 2, 3, 4, 5, 6]), dense_shape=np.array([3, 2])), merged_tensor_values)
def _create_feed_for_features_predictions_labels_list( self, features_predictions_labels_list): """Create feed list for a list of FeaturesPredictionsLabels.""" # Feed in the tensors in the following order: # Features -> Predictions -> Labels and using the standard key ordering # within each bucket. This should match the placeholder definitions when # generating the graph. # Note that we need to merge all examples into one Tensor before feeding. tensor_feed = [] for which_map, key, _ in self._iterate_fpl_maps_in_canonical_order(): tensor_feed.append( util.merge_tensor_values([ getattr(fpl, which_map)[key][encoding.NODE_SUFFIX] for fpl in features_predictions_labels_list # pytype: disable=wrong-arg-types ])) return tensor_feed
def testMergeTensorValueDenseDifferentShapesInts(self): merged_tensor_values = util.merge_tensor_values(tensor_values=[ np.array([[[10], [11]]]), np.array([[[20, 21, 22]]]), np.array([[[30, 31], [32, 33], [34, 35]]]), np.array([[[40, 41]]]), ]) self.assertAllEqual( np.array([ # Row 0 [[10, 0, 0], [11, 0, 0], [0, 0, 0]], # Row 1 [[20, 21, 22], [0, 0, 0], [0, 0, 0]], # Row 2 [[30, 31, 0], [32, 33, 0], [34, 35, 0]], # Row 3 [[40, 41, 0], [0, 0, 0], [0, 0, 0]], ]), merged_tensor_values)
def testMergeTensorValueSparseDifferentShapes(self): merged_tensor_values = util.merge_tensor_values(tensor_values=[ tf.SparseTensorValue(indices=np.array([[0, 0, 0], [0, 1, 1]]), values=np.array([10, 12]), dense_shape=np.array([1, 2, 2])), tf.SparseTensorValue(indices=np.array([[0, 2, 2]]), values=np.array([22]), dense_shape=np.array([1, 3, 3])), tf.SparseTensorValue(indices=np.array([[0, 0, 4]]), values=np.array([33]), dense_shape=np.array([1, 1, 5])) ]) self.assertSparseTensorValueEqual( tf.SparseTensorValue(indices=np.array([[0, 0, 0], [0, 1, 1], [1, 2, 2], [2, 0, 4]]), values=np.array([10, 12, 22, 33]), dense_shape=np.array([3, 3, 5])), merged_tensor_values)