For a detailed description see the data generator tutorial.
Will choose one of the generators from generator_fasta_lm,
generator_fasta_label_folder, generator_fasta_label_header_csv,
generator_rds, generator_random, generator_dummy or
generator_fasta_lm according to the train_type and random_sampling
arguments.
Usage
get_generator(
path = NULL,
train_type,
batch_size,
maxlen,
step = NULL,
shuffle_file_order = FALSE,
vocabulary = c("A", "C", "G", "T"),
seed = 1,
proportion_entries = NULL,
shuffle_input = FALSE,
format = "fasta",
path_file_log = NULL,
reverse_complement = FALSE,
n_gram = NULL,
n_gram_stride = NULL,
output_format = "target_right",
ambiguous_nuc = "zero",
proportion_per_seq = NULL,
skip_amb_nuc = NULL,
use_quality_score = FALSE,
padding = FALSE,
added_label_path = NULL,
target_from_csv = NULL,
add_input_as_seq = NULL,
max_samples = NULL,
concat_seq = NULL,
target_len = 1,
file_filter = NULL,
use_coverage = NULL,
sample_by_file_size = FALSE,
add_noise = NULL,
random_sampling = FALSE,
set_learning = NULL,
file_limit = NULL,
reverse_complement_encoding = FALSE,
read_data = FALSE,
target_split = NULL,
path_file_logVal = NULL,
model = NULL,
vocabulary_label = NULL,
masked_lm = NULL,
val = FALSE,
return_int = FALSE,
verbose = TRUE,
delete_used_files = FALSE,
reshape_xy = NULL
)Arguments
- path
Path to training data. If
train_typeislabel_folder, should be a vector or list where each entry corresponds to a class (list elements can be directories and/or individual files). Iftrain_typeis notlabel_folder, can be a single directory or file or a list of directories and/or files.- train_type
Either
"lm","lm_rds","masked_lm"for language model;"label_header","label_folder","label_csv","label_rds"for classification or"dummy_gen".Language model is trained to predict character(s) in a sequence.
"label_header"/"label_folder"/"label_csv"are trained to predict a corresponding class given a sequence as input.If
"label_header", class will be read from fasta headers.If
"label_folder", class will be read from folder, i.e. all files in one folder must belong to the same class.If
"label_csv", targets are read from a csv file. This file should have one column named "file". The targets then correspond to entries in that row (except "file" column). Example: if we are currently working with a file called "a.fasta" and corresponding label is "label_1", there should be a row in our csv filefile label_1 label_2 "a.fasta" 1 0 If
"label_rds", generator will iterate over set of .rds files containing each a list of input and target tensors. Not implemented for model with multiple inputs.If
"lm_rds", generator will iterate over set of .rds files and will split tensor according totarget_lenargument (targets are lasttarget_lennucleotides of each sequence).If
"dummy_gen", generator creates random data once and repeatedly feeds these to model.If
"masked_lm", generator maskes some parts of the input. Seemasked_lmargument for details.
- batch_size
Number of samples used for one network update.
- maxlen
Length of predictor sequence.
- step
Frequency of sampling steps.
- shuffle_file_order
Boolean, whether to go through files sequentially or shuffle beforehand.
- vocabulary
Vector of allowed characters. Characters outside vocabulary get encoded as specified in
ambiguous_nuc.- seed
Sets seed for reproducible results.
- proportion_entries
Proportion of fasta entries to keep. For example, if fasta file has 50 entries and
proportion_entries = 0.1, will randomly select 5 entries.- shuffle_input
Whether to shuffle entries in file.
- format
File format,
"fasta","fastq","rds"or"fasta.tar.gz","fastq.tar.gz"fortar.gzfiles.- path_file_log
Write name of files used for training to csv file if path is specified.
- reverse_complement
Boolean, for every new file decide randomly to use original data or its reverse complement.
- n_gram
Integer, encode target not nucleotide wise but combine n nucleotides at once. For example for
n=2, "AA" -> (1, 0,..., 0),"AC" -> (0, 1, 0,..., 0), "TT" -> (0,..., 0, 1), where the one-hot vectors have lengthlength(vocabulary)^n.- n_gram_stride
Step size for n-gram encoding. For AACCGGTT with
n_gram = 4andn_gram_stride = 2, generator encodes(AACC), (CCGG), (GGTT); forn_gram_stride = 4generator encodes(AACC), (GGTT).- output_format
Determines shape of output tensor for language model. Either
"target_right","target_middle_lstm","target_middle_cnn"or"wavenet". Assume a sequence"AACCGTA". Output correspond as follows"target_right": X = "AACCGT", Y = "A""target_middle_lstm": X = (X_1 = "AAC", X_2 = "ATG"), Y = "C"(note reversed order of X_2)"target_middle_cnn": X = "AACGTA", Y = "C""wavenet": X = "AACCGT", Y = "ACCGTA"
- ambiguous_nuc
How to handle nucleotides outside vocabulary, either
"zero","discard","empirical"or"equal".If
"zero", input gets encoded as zero vector.If
"equal", input is repetition of1/length(vocabulary).If
"discard", samples containing nucleotides outside vocabulary get discarded.If
"empirical", use nucleotide distribution of current file.
- proportion_per_seq
Numerical value between 0 and 1. Proportion of sequence to take samples from (use random subsequence).
- skip_amb_nuc
Threshold of ambiguous nucleotides to accept in fasta entry. Complete entry will get discarded otherwise.
- use_quality_score
Whether to use fastq quality scores. If
TRUEinput is not one-hot-encoding but corresponds to probabilities. For example (0.97, 0.01, 0.01, 0.01) instead of (1, 0, 0, 0).- padding
Whether to pad sequences too short for one sample with zeros.
- added_label_path
Path to file with additional input labels. Should be a csv file with one column named "file". Other columns should correspond to labels.
- target_from_csv
Path to csv file with target mapping. One column should be called "file" and other entries in row are the targets.
- add_input_as_seq
Boolean vector specifying for each entry in
added_label_pathif rows from csv should be encoded as a sequence or used directly. If a row in your csv file is a sequence this should beTRUE. For example you may want to add another sequence, say ACCGT. Then this would correspond to 1,2,2,3,4 in csv file (if vocabulary = c("A", "C", "G", "T")). Ifadd_input_as_seqisTRUE, 12234 gets one-hot encoded, so added input is a 3D tensor. Ifadd_input_as_seqisFALSEthis will feed network just raw data (a 2D tensor).- max_samples
Maximum number of samples to use from one file. If not
NULLand file has more thanmax_samplessamples, will randomly choose a subset ofmax_samplessamples.- concat_seq
Character string or
NULL. If notNULLall entries from file get concatenated to one sequence withconcat_seqstring between them. Example: If 1.entry AACC, 2. entry TTTG andconcat_seq = "ZZZ"this becomes AACCZZZTTTG.- target_len
Number of nucleotides to predict at once for language model.
- file_filter
Vector of file names to use from path_corpus.
- use_coverage
Integer or
NULL. If notNULL, use coverage as encoding rather than one-hot encoding and normalize. Coverage information must be contained in fasta header: there must be a string"cov_n"in the header, wherenis some integer.- sample_by_file_size
Sample new file weighted by file size (bigger files more likely).
- add_noise
NULLor list of arguments. If notNULL, list must contain the following arguments:noise_typecan be"normal"or"uniform"; optional argumentssdormeanif noise_type is"normal"(default issd=1andmean=0) ormin, maxifnoise_typeis"uniform"(default ismin=0, max=1).- random_sampling
Whether samples should be taken from random positions when using
max_samplesargument. IfFALSErandom samples are taken from a consecutive subsequence.- set_learning
When you want to assign one label to set of samples. Only implemented for
train_type = "label_folder". Input is a list with the following parameterssamples_per_target: how many samples to use for one target.maxlen: length of one sample.reshape_mode:"time_dist", "multi_input"or"concat".If
reshape_modeis"multi_input", generator will producesamples_per_targetseparate inputs, each of lengthmaxlen(model should havesamples_per_targetinput layers).If reshape_mode is
"time_dist", generator will produce a 4D input array. The dimensions correspond to(batch_size, samples_per_target, maxlen, length(vocabulary)).If
reshape_modeis"concat", generator will concatenatesamples_per_targetsequences of lengthmaxlento one long sequence.
If
reshape_modeis"concat", there is an additionalbuffer_lenargument. Ifbuffer_lenis an integer, the subsequences are interspaced withbuffer_lenrows. The input length is (maxlen\(*\)samples_per_target) +buffer_len\(*\) (samples_per_target- 1).
- file_limit
Integer or
NULL. If integer, use only specified number of randomly sampled files for training. Ignored if greater than number of files inpath.- reverse_complement_encoding
Whether to use both original sequence and reverse complement as two input sequences.
- read_data
If
TRUEthe first element of output is a list of length 2, each containing one part of paired read. Maxlen should be 2*length of one read.- target_split
If target gets read from csv file, list of names to divide target tensor into list of tensors. Example: if csv file has header names
"file", "label_1", "label_2", "label_3"andtarget_split = list(c("label_1", "label_2"), "label_3"), this will divide target matrix to list of length 2, where the first element contains columns named"label_1"and"label_2"and the second entry contains the column named"label_3".- path_file_logVal
Path to csv file logging used validation files.
- model
A keras model.
- vocabulary_label
Character vector of possible targets. Targets outside
vocabulary_labelwill get discarded iftrain_type = "label_header".- masked_lm
If not
NULL, input and target are equal except some parts of the input are masked or random. Must be list with the following arguments:mask_rate: Rate of input to mask (rate of input to replace with mask token).random_rate: Rate of input to set to random token.identity_rate: Rate of input where sample weights are applied but input and output are identical.include_sw: Whether to include sample weights.block_len(optional): Masked/random/identity regions appear in blocks of sizeblock_len.
- val
Logical, call initialized generator "genY" or "genValY" where Y is an integer between 1 and length of directories.
- return_int
Whether to return integer encoding or one-hot encoding.
- verbose
Whether to show messages.
- delete_used_files
Whether to delete file once used. Only applies for rds files.
- reshape_xy
Can be a list of functions to apply to input and/or target. List elements (containing the reshape functions) must be called x for input or y for target and each have arguments called x and y. For example:
reshape_xy = list(x = function(x, y) {return(x+1)}, y = function(x, y) {return(x+y)}). For rds generator needs to have an additional argument called sw.
Examples
if (FALSE) { # reticulate::py_module_available("tensorflow")
# create dummy fasta files
fasta_path <- tempfile()
dir.create(fasta_path)
create_dummy_data(file_path = fasta_path,
num_files = 3,
seq_length = 10,
num_seq = 5,
vocabulary = c("a", "c", "g", "t"))
gen <- get_generator(path = fasta_path,
maxlen = 5, train_type = "lm",
output_format = "target_right",
step = 3, batch_size = 7)
z <- gen()
x <- z[[1]]
y <- z[[2]]
dim(x)
dim(y)
}
