Различные результаты из образца () даже устанавливают семя [дубликат]

Чтобы асинхронно загружать файл с помощью Jquery, выполните следующие шаги:

шаг 1 В вашем проекте откройте менеджер Nuget и добавьте пакет (jquery fileupload (нужно только записать его в поле поиска, он появится и установит it.)) URL: https://github.com/blueimp/jQuery-File-Upload

Шаг 2 Добавьте ниже сценарии в файлы HTML, которые уже добавлены в проект, выполнив над пакетом:

jquery.ui.widget.js

jquery.iframe-transport.js

jquery.fileupload.js

Шаг 3 Запишите управление загрузкой файлов в соответствии с приведенным ниже кодом:


шаг 4 напишите js-метод как uploadFile, как показано ниже:

 function uploadFile(element) {

            $(element).fileupload({

                dataType: 'json',
                url: '../DocumentUpload/upload',
                autoUpload: true,
                add: function (e, data) {           
                  // write code for implementing, while selecting a file. 
                  // data represents the file data. 
                  //below code triggers the action in mvc controller
                  data.formData =
                                    {
                                     files: data.files[0]
                                    };
                  data.submit();
                },
                done: function (e, data) {          
                   // after file uploaded
                },
                progress: function (e, data) {

                   // progress
                },
                fail: function (e, data) {

                   //fail operation
                },
                stop: function () {

                  code for cancel operation
                }
            });

        };

шаг 5 В процессе загрузки файла элементов готовой функции, чтобы инициировать процесс, как показано ниже:

$(document).ready(function()
{
    uploadFile($('#upload'));

});

Шаг 6 Запишите контроллер MVC и действие, как показано ниже:

public class DocumentUploadController : Controller
    {       

        [System.Web.Mvc.HttpPost]
        public JsonResult upload(ICollection files)
        {
            bool result = false;

            if (files != null || files.Count > 0)
            {
                try
                {
                    foreach (HttpPostedFileBase file in files)
                    {
                        if (file.ContentLength == 0)
                            throw new Exception("Zero length file!");                       
                        else 
                            //code for saving a file

                    }
                }
                catch (Exception)
                {
                    result = false;
                }
            }


            return new JsonResult()
                {
                    Data=result
                };


        }

    }

152
задан Roland 28 November 2012 в 14:56
поделиться

5 ответов

Потребность в возможном желании воспроизводимых результатов, которые могут возникнуть, например, при попытке отладки вашей программы или, конечно, от попыток повторить то, что она делает:

Эти два результата мы «никогда не будем» «воспроизводятся, поскольку я просто попросил что-то« случайное »:

R> sample(LETTERS, 5)
[1] "K" "N" "R" "Z" "G"
R> sample(LETTERS, 5)
[1] "L" "P" "J" "E" "D"

Эти два, однако, идентичны , потому что я установил семя :

R> set.seed(42); sample(LETTERS, 5)
[1] "X" "Z" "G" "T" "O"
R> set.seed(42); sample(LETTERS, 5)
[1] "X" "Z" "G" "T" "O"
R> 

Во всем этом есть обширная литература; Википедия - хорошее начало. В сущности, эти ГСЧ называются генераторами псевдослучайных чисел, поскольку они на самом деле полностью алгоритмические : при одном и том же семя вы получаете одну и ту же последовательность. И это является признаком , а не ошибкой.

223
ответ дан Dirk Eddelbuettel 28 August 2018 в 08:18
поделиться

Вы должны установить семя каждый раз, когда хотите получить воспроизводимый случайный результат.

set.seed(1)
rnorm(4)
set.seed(1)
rnorm(4)
27
ответ дан Chia-hung 28 August 2018 в 08:18
поделиться

Фиксация семени имеет важное значение, когда мы пытаемся оптимизировать функцию, которая включает произвольно сгенерированные числа (например, при оценке на основе моделирования). Говоря кратко, если мы не зафиксируем семя, изменение из-за рисования разных случайных чисел, скорее всего, приведет к сбою алгоритма оптимизации.

Предположим, что по какой-либо причине вы хотите оценить стандартное отклонение ( sd) среднего нулевого нормального распределения путем моделирования, с учетом выборки. Это может быть достигнуто путем выполнения численной оптимизации вокруг этапов

  1. (Установка семени)
  2. Учитывая значение для sd, генерирует нормально распределенные данные
  3. Оцените вероятность ваших данных при моделируемых дистрибутивах

Следующие функции делают это один раз без шага 1. один раз включив его:

# without fixing the seed
simllh <- function(sd,y,Ns){
  simdist <- density(rnorm(Ns,mean=0,sd=sd))
  llh <- sapply(y,function(x){simdist$y[which.min((x-simdist$x)^2)]})
  return(-sum(log(llh)))
}
# same function with fixed seed
simllh.fix.seed <- function(sd,y,Ns){
  set.seed(48)
  simdist <- density(rnorm(Ns,mean=0,sd=sd))
  llh <- sapply(y,function(x){simdist$y[which.min((x-simdist$x)^2)]})
  return(-sum(log(llh)))
}

Мы можем проверить относительная производительность двух функций при обнаружении истинного значения параметра с коротким исследованием Монте-Карло:

N <- 20; sd <- 2 # features of simulated data
est1 <- rep(NA,1000); est2 <- rep(NA,1000) # initialize the estimate stores
for(i in 1:1000){
  as.numeric(Sys.time())-> t; set.seed((t - floor(t)) * 1e8 -> seed) # set the seed to random seed
  y <- rnorm(N,sd=sd) # generate the data
  est1[i] <- optim(1,simllh,y=y,Ns=1000,lower=0.01)$par
  est2[i] <- optim(1,simllh.fix.seed,y=y,Ns=1000,lower=0.01)$par
}
hist(est1)
hist(est2)

Результирующие распределения оценок параметров:

Когда мы фиксируем семена, числовой поиск заканчивается ближе к истинному значению параметра 2 намного чаще.

6
ответ дан Matthias Schmidtblaicher 28 August 2018 в 08:18
поделиться

Просто добавьте некоторые дополнительные аспекты. Необходимость установки семени: в академическом мире, если кто-то утверждает, что его алгоритм достигает, скажем, 98,05% производительности в одном симуляции, другие должны иметь возможность воспроизвести его.

?set.seed

Прохождение файла справки этой функции, это некоторые интересные факты:

(1) set.seed () возвращает NULL, invisible

(2) «Первоначально нет семени; новый из них создается из текущего времени и идентификатора процесса, когда требуется, поэтому разные сеансы будут давать разные результаты моделирования по умолчанию. Однако семя может быть восстановлено с предыдущего сеанса, если восстановлено ранее сохраненное рабочее пространство ». , поэтому вам нужно будет вызвать set.seed () с одинаковыми целыми значениями в следующий раз, когда вы захотите получить одну и ту же последовательность случайной последовательности.

14
ответ дан TobiMcNamobi 28 August 2018 в 08:18
поделиться
Функция

в основном set.seed () поможет повторно использовать один и тот же набор случайных величин, которые нам понадобятся в будущем, чтобы снова оценить конкретную задачу снова с помощью тех же случайных varibales

, нам просто нужно объявить это перед использованием любой функции генерации случайных чисел.

5
ответ дан user4388407 28 August 2018 в 08:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: