/usr/local/lib64/python3.6/site-packages/caffe2/python/operator_test
NameSizeModeActions
__pycache__/-0755rm
activation_ops_test.py96910644editdlrm
adadelta_test.py79320644editdlrm
adagrad_test.py75860644editdlrm
adagrad_test_helper.py51810644editdlrm
adam_test.py215590644editdlrm
affine_channel_op_test.py37840644editdlrm
alias_with_name_test.py9380644editdlrm
apmeter_test.py27380644editdlrm
arg_ops_test.py19170644editdlrm
assert_test.py7970644editdlrm
async_net_barrier_test.py9460644editdlrm
atomic_ops_test.py41040644editdlrm
basic_rnn_test.py47200644editdlrm
batch_box_cox_test.py50800644editdlrm
batch_bucketize_op_test.py37300644editdlrm
batch_moments_op_test.py27950644editdlrm
batch_sparse_to_dense_op_test.py41990644editdlrm
bbox_transform_test.py122580644editdlrm
bisect_percentile_op_test.py62270644editdlrm
blobs_queue_db_test.py32400644editdlrm
boolean_mask_test.py163890644editdlrm
boolean_unmask_test.py17110644editdlrm
box_with_nms_limit_op_test.py87500644editdlrm
bucketize_op_test.py9300644editdlrm
cast_op_test.py16000644editdlrm
ceil_op_test.py8880644editdlrm
channel_backprop_stats_op_test.py21310644editdlrm
channel_shuffle_test.py17940644editdlrm
channel_stats_op_test.py26390644editdlrm
checkpoint_test.py15000644editdlrm
clip_op_test.py19840644editdlrm
clip_tensor_op_test.py20760644editdlrm
collect_and_distribute_fpn_rpn_proposals_op_test.py112690644editdlrm
concat_op_cost_test.py28580644editdlrm
concat_split_op_test.py72660644editdlrm
conditional_test.py9950644editdlrm
conftest.py14460644editdlrm
conv_test.py324730644editdlrm
conv_transpose_test.py159450644editdlrm
copy_ops_test.py73740644editdlrm
copy_rows_to_tensor_op_test.py25260644editdlrm
cosine_embedding_criterion_op_test.py19530644editdlrm
counter_ops_test.py33480644editdlrm
crf_test.py53150644editdlrm
cross_entropy_ops_test.py100850644editdlrm
ctc_beam_search_decoder_op_test.py51970644editdlrm
ctc_greedy_decoder_op_test.py47430644editdlrm
cudnn_recurrent_test.py58170644editdlrm
dataset_ops_test.py238470644editdlrm
data_couple_op_test.py8580644editdlrm
decay_adagrad_test.py26940644editdlrm
deform_conv_test.py192760644editdlrm
dense_vector_to_id_list_op_test.py20440644editdlrm
depthwise_3x3_conv_test.py18630644editdlrm
detectron_keypoints.py79730644editdlrm
distance_op_test.py43510644editdlrm
dropout_op_test.py29710644editdlrm
duplicate_operands_test.py7340644editdlrm
elementwise_linear_op_test.py13820644editdlrm
elementwise_logical_ops_test.py46170644editdlrm
elementwise_ops_test.py333540644editdlrm
elementwise_op_broadcast_test.py174660644editdlrm
emptysample_ops_test.py19770644editdlrm
enforce_finite_op_test.py12860644editdlrm
ensure_clipped_test.py15050644editdlrm
ensure_cpu_output_op_test.py12440644editdlrm
erf_op_test.py7490644editdlrm
expand_op_test.py21090644editdlrm
fc_operator_test.py37200644editdlrm
feature_maps_ops_test.py214920644editdlrm
filler_ops_test.py84760644editdlrm
find_op_test.py13160644editdlrm
flatten_op_test.py9220644editdlrm
flexible_top_k_test.py26090644editdlrm
floor_op_test.py8940644editdlrm
fused_nbit_rowwise_conversion_ops_test.py140770644editdlrm
fused_nbit_rowwise_test_helper.py26930644editdlrm
gather_ops_test.py92160644editdlrm
gather_ranges_op_test.py91250644editdlrm
given_tensor_byte_string_to_uint8_fill_op_test.py13920644editdlrm
given_tensor_fill_op_test.py15030644editdlrm
glu_op_test.py12120644editdlrm
group_conv_test.py28700644editdlrm
group_norm_op_test.py52520644editdlrm
gru_test.py129320644editdlrm
heatmap_max_keypoint_op_test.py47700644editdlrm
histogram_test.py30970644editdlrm
hsm_test.py94560644editdlrm
hyperbolic_ops_test.py14720644editdlrm
im2col_col2im_test.py43110644editdlrm
image_input_op_test.py173450644editdlrm
index_hash_ops_test.py28850644editdlrm
index_ops_test.py45970644editdlrm
instance_norm_test.py99170644editdlrm
integral_image_ops_test.py34190644editdlrm
jsd_ops_test.py10440644editdlrm
key_split_ops_test.py12890644editdlrm
lars_test.py13540644editdlrm
layer_norm_op_test.py149830644editdlrm
leaky_relu_test.py56390644editdlrm
learning_rate_adaption_op_test.py28370644editdlrm
learning_rate_op_test.py86520644editdlrm
lengths_pad_op_test.py16250644editdlrm
lengths_reducer_fused_nbit_rowwise_ops_test.py154950644editdlrm
lengths_tile_op_test.py13320644editdlrm
lengths_top_k_ops_test.py23710644editdlrm
length_split_op_test.py48680644editdlrm
listwise_l2r_operator_test.py87400644editdlrm
load_save_test.py332410644editdlrm
locally_connected_op_test.py77610644editdlrm
loss_ops_test.py9020644editdlrm
lpnorm_op_test.py27250644editdlrm
map_ops_test.py22490644editdlrm
margin_ranking_criterion_op_test.py18160644editdlrm
math_ops_test.py16030644editdlrm
matmul_op_test.py100960644editdlrm
mean_op_test.py14690644editdlrm
merge_id_lists_op_test.py29890644editdlrm
mkl_conv_op_test.py15470644editdlrm
mkl_packed_fc_op_test.py26470644editdlrm
mod_op_test.py14590644editdlrm
moments_op_test.py17220644editdlrm
momentum_sgd_test.py64800644editdlrm
mpi_test.py81540644editdlrm
mul_gradient_benchmark.py15090644editdlrm
negate_gradient_op_test.py15180644editdlrm
ngram_ops_test.py23270644editdlrm
normalize_op_test.py16790644editdlrm
numpy_tile_op_test.py19240644editdlrm
one_hot_ops_test.py74780644editdlrm
onnx_while_test.py30700644editdlrm
order_switch_test.py13060644editdlrm
pack_ops_test.py126340644editdlrm
pack_rnn_sequence_op_test.py28910644editdlrm
pad_test.py13770644editdlrm
partition_ops_test.py68380644editdlrm
percentile_op_test.py44270644editdlrm
piecewise_linear_transform_test.py61870644editdlrm
pooling_test.py165080644editdlrm
prepend_dim_test.py15050644editdlrm
python_op_test.py13120644editdlrm
quantile_test.py32760644editdlrm
rand_quantization_op_speed_test.py31280644editdlrm
rank_loss_operator_test.py57520644editdlrm
rebatching_queue_test.py90470644editdlrm
record_queue_test.py31250644editdlrm
recurrent_network_test.py140480644editdlrm
recurrent_net_executor_test.py109220644editdlrm
reduce_ops_test.py173410644editdlrm
reduction_ops_test.py46640644editdlrm
reshape_ops_test.py82110644editdlrm
resize_op_test.py94170644editdlrm
rmac_regions_op_test.py31780644editdlrm
rms_norm_op_test.py13250644editdlrm
rnn_cell_test.py597070644editdlrm
roi_align_rotated_op_test.py75670644editdlrm
rowwise_counter_test.py22050644editdlrm
scale_op_test.py21770644editdlrm
segment_ops_test.py257450644editdlrm
self_binning_histogram_test.py129150644editdlrm
selu_op_test.py32320644editdlrm
sequence_ops_test.py160000644editdlrm
shape_inference_test.py257080644editdlrm
sinusoid_position_encoding_op_test.py23080644editdlrm
softmax_ops_test.py236850644editdlrm
softplus_op_test.py5160644editdlrm
sparse_dropout_with_replacement_op_test.py28850644editdlrm
sparse_gradient_checker_test.py12940644editdlrm
sparse_itemwise_dropout_with_replacement_op_test.py29130644editdlrm
sparse_lengths_sum_benchmark.py41590644editdlrm
sparse_lp_regularizer_test.py25530644editdlrm
sparse_normalize_test.py31360644editdlrm
sparse_ops_test.py34690644editdlrm
sparse_to_dense_mask_op_test.py36930644editdlrm
spatial_bn_op_test.py201820644editdlrm
specialized_segment_ops_test.py117750644editdlrm
split_op_cost_test.py86450644editdlrm
square_root_divide_op_test.py21790644editdlrm
stats_ops_test.py17890644editdlrm
stats_put_ops_test.py65960644editdlrm
storm_test.py65070644editdlrm
string_ops_test.py41540644editdlrm
text_file_reader_test.py25170644editdlrm
thresholded_relu_op_test.py23230644editdlrm
tile_op_test.py38870644editdlrm
top_k_test.py91130644editdlrm
torch_integration_test.py399410644editdlrm
transpose_op_test.py27220644editdlrm
trigonometric_op_test.py17150644editdlrm
unique_ops_test.py22550644editdlrm
unique_uniform_fill_op_test.py13350644editdlrm
unsafe_coalesce_test.py29400644editdlrm
upsample_op_test.py73080644editdlrm
utility_ops_test.py150540644editdlrm
video_input_op_test.py105030644editdlrm
weighted_multi_sample_test.py19970644editdlrm
weighted_sample_test.py27390644editdlrm
weighted_sum_test.py30520644editdlrm
weight_scale_test.py20570644editdlrm
wngrad_test.py82790644editdlrm
__init__.py00644editdlrm
Edit: /usr/local/lib64/python3.6/site-packages/caffe2/python/operator_test/dataset_ops_test.py (23847B)
import functools import operator import string import hypothesis.strategies as st import numpy as np import numpy.testing as npt from caffe2.python import core, dataset, workspace from caffe2.python.dataset import Const from caffe2.python.schema import ( FeedRecord, FetchRecord, Field, List, Map, NewRecord, Scalar, Struct, from_blob_list, ) from caffe2.python.test_util import TestCase from hypothesis import given def _assert_arrays_equal(actual, ref, err_msg): if ref.dtype.kind in ("S", "O", "U"): np.testing.assert_array_equal(actual, ref, err_msg=err_msg) else: np.testing.assert_allclose(actual, ref, atol=1e-4, rtol=1e-4, err_msg=err_msg) def _assert_records_equal(actual, ref): assert isinstance(actual, Field) assert isinstance(ref, Field) b1 = actual.field_blobs() b2 = ref.field_blobs() assert len(b1) == len(b2), "Records have different lengths: %d vs. %d" % ( len(b1), len(b2), ) for name, d1, d2 in zip(ref.field_names(), b1, b2): _assert_arrays_equal(d1, d2, err_msg="Mismatch in field %s." % name) @st.composite def _sparse_features_map(draw, num_records, **kwargs): sparse_maps_lengths = draw( st.lists( st.integers(min_value=1, max_value=10), min_size=num_records, max_size=num_records, ) ) sparse_maps_total_length = sum(sparse_maps_lengths) sparse_keys = draw( st.lists( st.integers(min_value=1, max_value=100), min_size=sparse_maps_total_length, max_size=sparse_maps_total_length, unique=True, ) ) sparse_values_lengths = draw( st.lists( st.integers(min_value=1, max_value=10), min_size=sparse_maps_total_length, max_size=sparse_maps_total_length, ) ) total_sparse_values_lengths = sum(sparse_values_lengths) sparse_values = draw( # max_value is max int64 st.lists( st.integers(min_value=1, max_value=9223372036854775807), min_size=total_sparse_values_lengths, max_size=total_sparse_values_lengths, ) ) return [ sparse_maps_lengths, sparse_keys, sparse_values_lengths, sparse_values, ] @st.composite def _dense_features_map(draw, num_records, **kwargs): float_lengths = draw( st.lists( st.integers(min_value=1, max_value=10), min_size=num_records, max_size=num_records, ) ) total_length = sum(float_lengths) float_keys = draw( st.lists( st.integers(min_value=1, max_value=100), min_size=total_length, max_size=total_length, unique=True, ) ) float_values = draw( st.lists(st.floats(), min_size=total_length, max_size=total_length) ) return [float_lengths, float_keys, float_values] @st.composite def _dataset(draw, min_elements=3, max_elements=10, **kwargs): schema = Struct( # Dense Features Map ("floats", Map(Scalar(np.int32), Scalar(np.float32))), # Sparse Features Map ( "int_lists", Map( Scalar(np.int32), List(Scalar(np.int64)), ), ), # Complex Type ("text", Scalar(str)), ) num_records = draw(st.integers(min_value=min_elements, max_value=max_elements)) raw_dense_features_map_contents = draw(_dense_features_map(num_records)) raw_sparse_features_map_contents = draw(_sparse_features_map(num_records)) raw_text_contents = [ draw( st.lists( st.text(alphabet=string.ascii_lowercase), min_size=num_records, max_size=num_records, ) ) ] # Concatenate all raw contents to a single one contents_raw = ( raw_dense_features_map_contents + raw_sparse_features_map_contents + raw_text_contents ) contents = from_blob_list(schema, contents_raw) return (schema, contents, num_records) class TestDatasetOps(TestCase): @given(_dataset()) def test_pack_unpack(self, input): """ Tests if packing and unpacking of the whole dataset is an identity. """ (schema, contents, num_records) = input dataset_fields = schema.field_names() for pack_to_single_shared_ptr in (True, False): net = core.Net("pack_unpack_net") batch = NewRecord(net, contents) FeedRecord(batch, contents) packed = net.PackRecords( batch.field_blobs(), 1, fields=dataset_fields, pack_to_single_shared_ptr=pack_to_single_shared_ptr, ) unpacked = packed.UnPackRecords( [], len(dataset_fields), fields=dataset_fields ) workspace.RunNetOnce(net) for initial_tensor, unpacked_tensor in zip(batch.field_blobs(), unpacked): npt.assert_array_equal( workspace.FetchBlob(initial_tensor), workspace.FetchBlob(unpacked_tensor), ) def test_dataset_ops(self): """ 1. Defining the schema of our dataset. This example schema could represent, for example, a search query log. """ schema = Struct( # fixed size vector, which will be stored as a matrix when batched ("dense", Scalar((np.float32, 3))), # could represent a feature map from feature ID to float value ("floats", Map(Scalar(np.int32), Scalar(np.float32))), # could represent a multi-valued categorical feature map ( "int_lists", Map( Scalar(np.int32), List(Scalar(np.int64)), ), ), # could represent a multi-valued, weighted categorical feature map ( "id_score_pairs", Map( Scalar(np.int32), Map( Scalar(np.int64), Scalar(np.float32), keys_name="ids", values_name="scores", ), ), ), # additional scalar information ( "metadata", Struct( ("user_id", Scalar(np.int64)), ("user_embed", Scalar((np.float32, 2))), ("query", Scalar(str)), ), ), ) """ This is what the flattened fields for this schema look like, along with its type. Each one of these fields will be stored, read and written as a tensor. """ expected_fields = [ ("dense", (np.float32, 3)), ("floats:lengths", np.int32), ("floats:values:keys", np.int32), ("floats:values:values", np.float32), ("int_lists:lengths", np.int32), ("int_lists:values:keys", np.int32), ("int_lists:values:values:lengths", np.int32), ("int_lists:values:values:values", np.int64), ("id_score_pairs:lengths", np.int32), ("id_score_pairs:values:keys", np.int32), ("id_score_pairs:values:values:lengths", np.int32), ("id_score_pairs:values:values:values:ids", np.int64), ("id_score_pairs:values:values:values:scores", np.float32), ("metadata:user_id", np.int64), ("metadata:user_embed", (np.float32, 2)), ("metadata:query", str), ] zipped = zip(expected_fields, schema.field_names(), schema.field_types()) for (ref_name, ref_type), name, dtype in zipped: self.assertEquals(ref_name, name) self.assertEquals(np.dtype(ref_type), dtype) """ 2. The contents of our dataset. Contents as defined below could represent, for example, a log of search queries along with dense, sparse features and metadata. The dataset below has 3 top-level entries. """ contents_raw = [ # dense [[1.1, 1.2, 1.3], [2.1, 2.2, 2.3], [3.1, 3.2, 3.3]], # floats [1, 2, 3], # len [11, 21, 22, 31, 32, 33], # key [1.1, 2.1, 2.2, 3.1, 3.2, 3.3], # value # int lists [2, 0, 1], # len [11, 12, 31], # key [2, 4, 3], # value:len [111, 112, 121, 122, 123, 124, 311, 312, 313], # value:value # id score pairs [1, 2, 2], # len [11, 21, 22, 31, 32], # key [1, 1, 2, 2, 3], # value:len [111, 211, 221, 222, 311, 312, 321, 322, 323], # value:ids [11.1, 21.1, 22.1, 22.2, 31.1, 31.2, 32.1, 32.2, 32.3], # val:score # metadata [123, 234, 456], # user_id [[0.2, 0.8], [0.5, 0.5], [0.7, 0.3]], # user_embed ["dog posts", "friends who like to", "posts about ca"], # query ] # convert the above content to ndarrays, checking against the schema contents = from_blob_list(schema, contents_raw) """ 3. Creating and appending to the dataset. We first create an empty dataset with the given schema. Then, a Writer is used to append these entries to the dataset. """ ds = dataset.Dataset(schema) net = core.Net("init") with core.NameScope("init"): ds.init_empty(net) content_blobs = NewRecord(net, contents) FeedRecord(content_blobs, contents) writer = ds.writer(init_net=net) writer.write_record(net, content_blobs) workspace.RunNetOnce(net) """ 4. Iterating through the dataset contents. If we were to iterate through the top level entries of our dataset, this is what we should expect to see: """ entries_raw = [ ( [[1.1, 1.2, 1.3]], # dense [1], [11], [1.1], # floats [2], [11, 12], [2, 4], [111, 112, 121, 122, 123, 124], # intlst [1], [11], [1], [111], [11.1], # id score pairs [123], [[0.2, 0.8]], ["dog posts"], # metadata ), ( [[2.1, 2.2, 2.3]], # dense [2], [21, 22], [2.1, 2.2], # floats [0], [], [], [], # int list [2], [21, 22], [1, 2], [211, 221, 222], [21.1, 22.1, 22.2], [234], [[0.5, 0.5]], ["friends who like to"], # metadata ), ( [[3.1, 3.2, 3.3]], # dense [3], [31, 32, 33], [3.1, 3.2, 3.3], # floats [1], [31], [3], [311, 312, 313], # int lst [2], [31, 32], [2, 3], [311, 312, 321, 322, 323], [31.1, 31.2, 32.1, 32.2, 32.3], # id score list [456], [[0.7, 0.3]], ["posts about ca"], # metadata ), # after the end of the dataset, we will keep getting empty vectors ([],) * 16, ([],) * 16, ] entries = [from_blob_list(schema, e) for e in entries_raw] """ Let's go ahead and create the reading nets. We will run `read` net multiple times and assert that we are reading the entries the way we stated above. """ read_init_net = core.Net("read_init") read_next_net = core.Net("read_next") reader = ds.reader(read_init_net) should_continue, batch = reader.read_record(read_next_net) workspace.RunNetOnce(read_init_net) workspace.CreateNet(read_next_net, True) for entry in entries: workspace.RunNet(str(read_next_net)) actual = FetchRecord(batch) _assert_records_equal(actual, entry) """ 5. Reading/writing in a single plan If all of operations on the data are expressible as Caffe2 operators, we don't need to load the data to python, iterating through the dataset in a single Plan. Where we will process the dataset a little and store it in a second dataset. We can reuse the same Reader since it supports reset. """ reset_net = core.Net("reset_net") reader.reset(reset_net) read_step, batch = reader.execution_step() """ We will add the line number * 1000 to the feature ids. """ process_net = core.Net("process") line_no = Const(process_net, 0, dtype=np.int32) const_one = Const(process_net, 1000, dtype=np.int32) process_net.Add([line_no, const_one], [line_no]) field = batch.floats.keys.get() process_net.Print(field, []) process_net.Add([field, line_no], field, broadcast=1, axis=0) """ Lets create a second dataset and append to it. """ ds2 = dataset.Dataset(schema, name="dataset2") ds2.init_empty(reset_net) writer = ds2.writer(reset_net) writer.write_record(process_net, batch) # commit is not necessary for DatasetWriter but will add it for # generality of the example commit_net = core.Net("commit") writer.commit(commit_net) """ Time to create and run a plan which will do the processing """ plan = core.Plan("process") plan.AddStep(core.execution_step("reset", reset_net)) plan.AddStep(read_step.AddNet(process_net)) plan.AddStep(core.execution_step("commit", commit_net)) workspace.RunPlan(plan) """ Now we should have dataset2 populated. """ ds2_data = FetchRecord(ds2.content()) field = ds2_data.floats.keys field.set(blob=field.get() - [1000, 2000, 2000, 3000, 3000, 3000]) _assert_records_equal(contents, ds2_data) """ 6. Slicing a dataset You can create a new schema from pieces of another schema and reuse the same data. """ subschema = Struct(("top_level", schema.int_lists.values)) int_list_contents = contents.int_lists.values.field_names() self.assertEquals(len(subschema.field_names()), len(int_list_contents)) """ 7. Random Access a dataset """ read_init_net = core.Net("read_init") read_next_net = core.Net("read_next") idx = np.array([2, 1, 0]) indices_blob = Const(read_init_net, idx, name="indices") reader = ds.random_reader(read_init_net, indices_blob) reader.computeoffset(read_init_net) should_stop, batch = reader.read_record(read_next_net) workspace.CreateNet(read_init_net, True) workspace.RunNetOnce(read_init_net) workspace.CreateNet(read_next_net, True) for i in range(len(entries)): k = idx[i] if i in idx else i entry = entries[k] workspace.RunNet(str(read_next_net)) actual = FetchRecord(batch) _assert_records_equal(actual, entry) workspace.RunNet(str(read_next_net)) self.assertEquals(True, workspace.FetchBlob(should_stop)) """ 8. Random Access a dataset with loop_over = true """ read_init_net = core.Net("read_init") read_next_net = core.Net("read_next") idx = np.array([2, 1, 0]) indices_blob = Const(read_init_net, idx, name="indices") reader = ds.random_reader(read_init_net, indices_blob, loop_over=True) reader.computeoffset(read_init_net) should_stop, batch = reader.read_record(read_next_net) workspace.CreateNet(read_init_net, True) workspace.RunNetOnce(read_init_net) workspace.CreateNet(read_next_net, True) for _ in range(len(entries) * 3): workspace.RunNet(str(read_next_net)) self.assertEquals(False, workspace.FetchBlob(should_stop)) """ 9. Sort and shuffle a dataset This sort the dataset using the score of a certain column, and then shuffle within each chunk of size batch_size * shuffle_size before shuffling the chunks. """ read_init_net = core.Net("read_init") read_next_net = core.Net("read_next") reader = ds.random_reader(read_init_net) reader.sort_and_shuffle(read_init_net, "int_lists:lengths", 1, 2) reader.computeoffset(read_init_net) should_continue, batch = reader.read_record(read_next_net) workspace.CreateNet(read_init_net, True) workspace.RunNetOnce(read_init_net) workspace.CreateNet(read_next_net, True) expected_idx = np.array([2, 1, 0]) for i in range(len(entries)): k = expected_idx[i] if i in expected_idx else i entry = entries[k] workspace.RunNet(str(read_next_net)) actual = FetchRecord(batch) _assert_records_equal(actual, entry) """ Trim a dataset """ trim_net = core.Net("trim_ds") ds.trim(trim_net, multiple_of=2) workspace.RunNetOnce(trim_net) trimmed = FetchRecord(ds.content()) EXPECTED_SIZES = [2, 2, 3, 3, 2, 2, 2, 6, 2, 3, 3, 4, 4, 2, 2, 2] actual_sizes = [d.shape[0] for d in trimmed.field_blobs()] self.assertEquals(EXPECTED_SIZES, actual_sizes) def test_last_n_window_ops(self): collect_net = core.Net("collect_net") collect_net.GivenTensorFill( [], "input", shape=[3, 2], values=[1.0, 2.0, 3.0, 4.0, 5.0, 6.0], ) input_array = np.array(list(range(1, 7)), dtype=np.float32).reshape(3, 2) workspace.CreateBlob("output") workspace.FeedBlob("next", np.array(0, dtype=np.int32)) collect_net.LastNWindowCollector( ["output", "next", "input"], ["output", "next"], num_to_collect=7, ) plan = core.Plan("collect_data") plan.AddStep(core.execution_step("collect_data", [collect_net], num_iter=1)) workspace.RunPlan(plan) reference_result = workspace.FetchBlob("output") npt.assert_array_equal(input_array, reference_result) plan = core.Plan("collect_data") plan.AddStep(core.execution_step("collect_data", [collect_net], num_iter=2)) workspace.RunPlan(plan) reference_result = workspace.FetchBlob("output") npt.assert_array_equal(input_array[[1, 2, 2, 0, 1, 2, 0]], reference_result) plan = core.Plan("collect_data") plan.AddStep(core.execution_step("collect_data", [collect_net], num_iter=3)) workspace.RunPlan(plan) reference_result = workspace.FetchBlob("output") npt.assert_array_equal(input_array[[2, 0, 1, 2, 2, 0, 1]], reference_result) def test_last_n_window_ops_shape_inference(self): collect_net = core.Net("collect_net") collect_net.GivenTensorFill( [], "input", shape=[3, 2], values=[1.0, 2.0, 3.0, 4.0, 5.0, 6.0], ) workspace.CreateBlob("output") workspace.FeedBlob("next", np.array(0, dtype=np.int32)) collect_net.LastNWindowCollector( ["output", "next", "input"], ["output", "next"], num_to_collect=7, ) (shapes, types) = workspace.InferShapesAndTypes([collect_net]) workspace.RunNetOnce(collect_net) self.assertTrue( np.array_equal( shapes["output"], np.array([7, workspace.blobs["output"].shape[1]]) ) ) def test_last_n_window_ops_shape_inference_4d_input(self): input_shape = [3, 2, 4, 5] collect_net = core.Net("collect_net") collect_net.GivenTensorFill( [], "input", shape=input_shape, values=[ float(val) for val in range(functools.reduce(operator.mul, input_shape)) ], ) workspace.CreateBlob("output") workspace.FeedBlob("next", np.array(0, dtype=np.int32)) collect_net.LastNWindowCollector( ["output", "next", "input"], ["output", "next"], num_to_collect=7, ) (shapes, types) = workspace.InferShapesAndTypes([collect_net]) workspace.RunNetOnce(collect_net) self.assertTrue( np.array_equal( shapes["output"], np.array([7, *list(workspace.blobs["output"].shape[1:])]) ) ) def test_collect_tensor_ops(self): init_net = core.Net("init_net") blobs = ["blob_1", "blob_2", "blob_3"] bvec_map = {} ONE = init_net.ConstantFill([], "ONE", shape=[1, 2], value=1) for b in blobs: init_net.ConstantFill([], [b], shape=[1, 2], value=0) bvec_map[b] = b + "_vec" init_net.CreateTensorVector([], [bvec_map[b]]) reader_net = core.Net("reader_net") for b in blobs: reader_net.Add([b, ONE], [b]) collect_net = core.Net("collect_net") num_to_collect = 1000 max_example_to_cover = 100000 bvec = [bvec_map[b] for b in blobs] collect_net.CollectTensor( bvec + blobs, bvec, num_to_collect=num_to_collect, ) print("Collect Net Proto: {}".format(collect_net.Proto())) plan = core.Plan("collect_data") plan.AddStep(core.execution_step("collect_init", init_net)) plan.AddStep( core.execution_step( "collect_data", [reader_net, collect_net], num_iter=max_example_to_cover ) ) workspace.RunPlan(plan) # concat the collected tensors concat_net = core.Net("concat_net") bconcated_map = {} bsize_map = {} for b in blobs: bconcated_map[b] = b + "_concated" bsize_map[b] = b + "_size" concat_net.ConcatTensorVector([bvec_map[b]], [bconcated_map[b]]) concat_net.TensorVectorSize([bvec_map[b]], [bsize_map[b]]) workspace.RunNetOnce(concat_net) # check data reference_result = workspace.FetchBlob(bconcated_map[blobs[0]]) self.assertEqual( reference_result.shape, (min(num_to_collect, max_example_to_cover), 2) ) size = workspace.FetchBlob(bsize_map[blobs[0]]) self.assertEqual(tuple(), size.shape) self.assertEqual(min(num_to_collect, max_example_to_cover), size.item()) hist, _ = np.histogram( reference_result[:, 0], bins=10, range=(1, max_example_to_cover) ) print("Sample histogram: {}".format(hist)) self.assertTrue(all(hist > 0.6 * (num_to_collect / 10))) for i in range(1, len(blobs)): result = workspace.FetchBlob(bconcated_map[blobs[i]]) self.assertEqual(reference_result.tolist(), result.tolist()) if __name__ == "__main__": import unittest unittest.main()