সময় সিরিজের জন্য কনভোলিউশনাল নিউরাল নেটওয়ার্ক?


21

আমি জানতে চাই যে সময়-সিরিজের শ্রেণিবদ্ধকরণের জন্য কোনও কনভোলশনাল নিউরাল নেটকে প্রশিক্ষণের জন্য কোনও কোড রয়েছে কিনা।

আমি সাম্প্রতিক কিছু কাগজপত্র দেখেছি ( http://www.fer.unizg.hr/_download/repository/KDI-Djalto.pdf ) তবে আমি নিশ্চিত না যে এখানে কিছু আছে কিনা বা আমি নিজে কোড দিয়েছি কিনা।


1
মানুষ, এটা খুব আজব। সিএনএন চিত্রগুলির (সিগন্যালগুলি) জন্য খুব দুর্দান্ত সরঞ্জাম এবং এগুলি ব্যবহার করে স্টক পূর্বাভাস সম্পর্কে প্রায় কোনও কাগজপত্র নেই ... আমি কেবলমাত্র পুরানো স্নায়বিক নেটওয়ার্কগুলি সম্পর্কে জানতে পারি যা সে সময় কিছুই ছিল না ভাল ...
মাস্টারআইডি

উত্তর:


21

আপনি একটি ওপেন সোর্স কালো বাক্স সমাধান দিকে তাকিয়ে চেষ্টা চান ওয়েকা , এমএল আলগোরিদিম একটি জাভা লাইব্রেরি। এই লোকটি ওয়েকার মধ্যে কোভলিউশনাল স্তরগুলিও ব্যবহার করেছে এবং আপনি কোনও সময় সিরিজের শ্রেণিবদ্ধকরণ কার্য অনুসারে তার শ্রেণিবদ্ধকরণ কোডটি সম্পাদনা করতে পারেন।

আপনার নিজের কোডিংয়ের জন্য ... আমি পাইথন লাইব্রেরি, থিয়ানো ব্যবহার করে একই সমস্যা নিয়ে কাজ করছি (যদি আমি শীঘ্রই এটি ক্র্যাক করি তবে আমি আমার পোস্টের লিঙ্কের সাথে এই পোস্টটি সম্পাদনা করব)। ওয়েব অনুসন্ধানের ভাল সময় থেকে আমাকে সহায়তা করতে আমি যে সমস্ত কাগজপত্র ব্যবহার করব তার একটি বিস্তৃত তালিকা এখানে রয়েছে:

শুরুর পয়েন্ট হিসাবে, আপনি এখানে পাওয়া কোডটি বিভিন্ন সংখ্যার বিভাগের বিভাজনে শ্রেণিবদ্ধকরণ করতে, বা শ্রেণিবদ্ধকরণ থেকে রিগ্রেশন এডিট করতে পারেন - আমি চূড়ান্ত সফটম্যাক্স স্তরটি সরিয়ে এবং কেবল একটি আউটপুট নোড তৈরি করে এটি করেছি। আমি এটিকে y=sin(x)কোনও পরীক্ষার মতো ফাংশনের টুকরোগুলিতে প্রশিক্ষণ দিয়েছি ।


শুধু এফওয়াইআই - এর মধ্যে কয়েকটিতে আমি অনেক ত্রুটি পেয়েছি তাই এগুলি অন্ধভাবে প্রয়োগ করবেন না। উল্লেখযোগ্যভাবে তাদের মধ্যে কিছু প্রকাশিত কাগজপত্র নয়। যদিও
আলেকজান্ডার ম্যাকফার্লেন

আপনি যদি আপনার অর্জিত জ্ঞানটি এখানে উল্লিখিত কোন কাগজপত্রগুলিতে ভাগ করে নিতে পারেন তবে তা প্রশংসা হবে?
বাইসপজাই

1

সময় সিরিজের পূর্বাভাসগুলি তা রিগ্রেশন বা শ্রেণিবদ্ধকরণে করা সম্পূর্ণভাবে সিএনএন ব্যবহার করা সম্ভব। সিএনএনগুলি স্থানীয় নিদর্শনগুলি সন্ধান করতে ভাল এবং বাস্তবে সিএনএনগুলি এই ধারণাটি নিয়ে কাজ করে যে স্থানীয় নিদর্শনগুলি যে কোনও জায়গায় প্রাসঙ্গিক। এছাড়াও কনভোলশন সময় সিরিজ এবং সিগন্যাল প্রসেসিংয়ের একটি সুপরিচিত অপারেশন। আরএনএনগুলির সাথে আরেকটি সুবিধা হ'ল তারা গণনা করাতে খুব দ্রুত হতে পারে কারণ তারা আরএনএন অনুক্রমিক প্রকৃতির বিপরীতে সমান্তরালভাবে তৈরি হতে পারে।

নীচের কোডটিতে আমি একটি কেস স্টাডি প্রদর্শন করব যেখানে আর কেরাস ব্যবহার করে বিদ্যুতের চাহিদা পূর্বাভাস দেওয়া সম্ভব। দ্রষ্টব্য যে এটি কোনও শ্রেণিবদ্ধকরণের সমস্যা নয় (আমার কাছে উদাহরণটি কার্যকর ছিল না) তবে শ্রেণিবদ্ধকরণ সমস্যা পরিচালনা করতে কোড পরিবর্তন করা কঠিন নয় (লিনিয়ার আউটপুট এবং ক্রস এনট্রপি ক্ষতির পরিবর্তে একটি সফটম্যাক্স আউটপুট ব্যবহার করুন)।

ডেটাসেটটি fpp2 লাইব্রেরিতে পাওয়া যায়:

library(fpp2)
library(keras)

data("elecdemand")

elec <- as.data.frame(elecdemand)

dm <- as.matrix(elec[, c("WorkDay", "Temperature", "Demand")])

পরবর্তী আমরা একটি ডেটা জেনারেটর তৈরি করি। প্রশিক্ষণ প্রক্রিয়া চলাকালীন ব্যাচিংয়ের বৈধতা এবং বৈধতা ডেটা তৈরি করার জন্য এটি ব্যবহার করা হয়। নোট করুন যে এই কোডটি "ডেপ লার্নিং উইথ আর" বইটিতে পাওয়া ডেটা জেনারেটরের একটি সহজ সংস্করণ (এবং এর ভিডিও সংস্করণ "ডিপ লার্নিং উইথ আর মোশন") প্রকাশনা থেকে প্রাপ্ত from

data_gen <- function(dm, batch_size, ycol, lookback, lookahead) {

  num_rows <- nrow(dm) - lookback - lookahead
  num_batches <- ceiling(num_rows/batch_size)
  last_batch_size <- if (num_rows %% batch_size == 0) batch_size else num_rows %% batch_size
  i <- 1
  start_idx <- 1
  return(function(){
    running_batch_size <<- if (i == num_batches) last_batch_size else batch_size
    end_idx <- start_idx + running_batch_size - 1
    start_indices <- start_idx:end_idx

    X_batch <- array(0, dim = c(running_batch_size,
                                lookback,
                                ncol(dm)))
    y_batch <- array(0, dim = c(running_batch_size, 
                                length(ycol)))

    for (j in 1:running_batch_size){
      row_indices <- start_indices[j]:(start_indices[j]+lookback-1)
      X_batch[j,,] <- dm[row_indices,]
      y_batch[j,] <- dm[start_indices[j]+lookback-1+lookahead, ycol]
    }
    i <<- i+1
    start_idx <<- end_idx+1 
    if (i > num_batches){
      i <<- 1
      start_idx <<- 1
    }

    list(X_batch, y_batch)

  })
}

এরপরে আমরা আমাদের ডেটা জেনারেটরে পাস করার জন্য কয়েকটি পরামিতি নির্দিষ্ট করি (আমরা দুটি জেনারেটর তৈরি করি একটি প্রশিক্ষণের জন্য এবং একটি বৈধতার জন্য)।

lookback <- 72
lookahead <- 1
batch_size <- 168
ycol <- 3

লুকব্যাক প্যারামিটারটি হ'ল অতীতে আমরা কতদূর দেখতে চাই এবং ভবিষ্যতে আমরা কতদূর ভবিষ্যদ্বাণী করতে চাই look

এরপরে আমরা আমাদের ডেটাসেটকে বিভক্ত করে দুটি জেনারেটর তৈরি করি:

ট্রেন_ডিএম <- ডিএম [1: 15000,]

val_dm <- dm[15001:16000,]
test_dm <- dm[16001:nrow(dm),]

train_gen <- data_gen(
  train_dm,
  batch_size = batch_size,
  ycol = ycol,
  lookback = lookback,
  lookahead = lookahead
)


val_gen <- data_gen(
  val_dm,
  batch_size = batch_size,
  ycol = ycol,
  lookback = lookback,
  lookahead = lookahead
)

পরবর্তী আমরা একটি কনভ্যুশনাল স্তর সহ একটি নিউরাল নেটওয়ার্ক তৈরি করি এবং মডেলটিকে প্রশিক্ষণ দিন:

model <- keras_model_sequential() %>%
  layer_conv_1d(filters=64, kernel_size=4, activation="relu", input_shape=c(lookback, dim(dm)[[-1]])) %>%
  layer_max_pooling_1d(pool_size=4) %>%
  layer_flatten() %>%
  layer_dense(units=lookback * dim(dm)[[-1]], activation="relu") %>%
  layer_dropout(rate=0.2) %>%
  layer_dense(units=1, activation="linear")


model %>% compile(
  optimizer = optimizer_rmsprop(lr=0.001),
  loss = "mse",
  metric = "mae"
)

val_steps <- 48

history <- model %>% fit_generator(
  train_gen,
  steps_per_epoch = 50,
  epochs = 50,
  validation_data = val_gen,
  validation_steps = val_steps
)

অবশেষে, আমরা একটি সাধারণ পদ্ধতি ব্যবহার করে 24 ডেটাপয়েন্টগুলির ক্রমিকের পূর্বাভাস দেওয়ার জন্য কিছু কোড তৈরি করতে পারি, আর মন্তব্যে ব্যাখ্যা করে।

####### How to create predictions ####################

#We will create a predict_forecast function that will do the following: 
#The function will be given a dataset that will contain weather forecast values and Demand values for the lookback duration. The rest of the MW values will be non-available and 
#will be "filled-in" by the deep network (predicted). We will do this with the test_dm dataset.

horizon <- 24

#Store all target values in a vector
goal_predictions <- test_dm[1:(lookback+horizon),ycol]
#get a copy of the dm_test
test_set <- test_dm[1:(lookback+horizon),]
#Set all the Demand values, except the lookback values, in the test set to be equal to NA.
test_set[(lookback+1):nrow(test_set), ycol] <- NA

predict_forecast <- function(model, test_data, ycol, lookback, horizon) {
  i <-1
  for (i in 1:horizon){
    start_idx <- i
    end_idx <- start_idx + lookback - 1
    predict_idx <- end_idx + 1
    input_batch <- test_data[start_idx:end_idx,]
    input_batch <- input_batch %>% array_reshape(dim = c(1, dim(input_batch)))
    prediction <- model %>% predict_on_batch(input_batch)
    test_data[predict_idx, ycol] <- prediction
  }

  test_data[(lookback+1):(lookback+horizon), ycol]
}

preds <- predict_forecast(model, test_set, ycol, lookback, horizon)

targets <- goal_predictions[(lookback+1):(lookback+horizon)]

pred_df <- data.frame(x = 1:horizon, y = targets, y_hat = preds)

এবং ভয়েলা:

এখানে চিত্র বর্ণনা লিখুন

এতোটা খারাপ না.

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.