/// <summary>
        /// For each block, check whether all hidden dimensions in hiddenList are the same (except for 0).
        /// If all hidden dimensions in one block are 0, it will be set to the last hidden dimension
        /// (if exists) or the maximum hidden dimension (if not exist).
        /// </summary>
        /// <returns>The list of hidden dimensions in blocks.</returns>
        private List <int> CheckBlockHiddenSize(int blockPerLayer)
        {
            var hiddenSizePerBlock = new List <int>();

            for (var i = 0; i < DistillBlocks; ++i)
            {
                var hiddenSizesPerBlock = Enumerable.Range(i * blockPerLayer, blockPerLayer)
                                          .Select(j => SearchSpace.ArchHiddenSize[DiscreteArches[j]]).ToArray();
                var nextHiddenSize = SearchSpace.CheckHiddenDimensionsAndReturnMax(hiddenSizesPerBlock);
                if (nextHiddenSize == 0)
                {
                    if (hiddenSizePerBlock.Count == 0)
                    {
                        nextHiddenSize = SearchSpace.ArchHiddenSize[SearchSpace.ArchHiddenSize.Length - 1];
                    }
                    else
                    {
                        nextHiddenSize = hiddenSizePerBlock[hiddenSizePerBlock.Count - 1];
                    }
                }
                hiddenSizePerBlock.Add(nextHiddenSize);
            }

            return(hiddenSizePerBlock);
        }