কৃষি ও গভীর শিক্ষা: মাটি ও ফসলের ফলন উন্নত করা

কৃষি ও গভীর শিক্ষা: মাটি ও ফসলের ফলন উন্নত করা

উত্স নোড: 3066255

ভূমিকা

অনেক ভারতীয়দের জন্য কৃষি শুধু একটি চাকরির চেয়েও বেশি কিছু; এটা জীবনের একটা উপায়. এটি সেই উপায় যার মাধ্যমে তারা তাদের জীবিকা নির্বাহ করে এবং ভারতের অর্থনীতিতে ব্যাপক অবদান রাখে। উপযুক্ত ফসল নির্বাচন এবং আগাছার বৃদ্ধি শনাক্ত করার জন্য সংশ্লিষ্ট অনুপাতে কাদামাটি, বালি এবং পলি কণা রয়েছে এমন মাটির ধরন নির্ধারণ করা গুরুত্বপূর্ণ। কৃষিতে গভীর শিক্ষার সম্ভাবনা আবিষ্কার করুন। ভারতের জন্য মাটির ধরন এবং আগাছা সনাক্তকরণের গুরুত্ব বুঝুন।

গভীর জ্ঞানার্জন একটি উদীয়মান প্রযুক্তি যা প্রতিটি ক্ষেত্রে সহায়ক। মাঠ পর্যবেক্ষণ, মাঠ পরিচালনা, রোবোটিক্স, মাটি, জল, জলবায়ু পরিস্থিতির পূর্বাভাস এবং ল্যান্ডস্কেপ-স্তরের জমি এবং ফসলের ধরন পর্যবেক্ষণের জন্য স্মার্ট কৃষিতে গভীর শিক্ষা জনপ্রিয়ভাবে প্রয়োগ করা হয়েছে। আমরা গভীর শিক্ষার আর্কিটেকচারে মাটির ফটো ফিড করতে পারি, বৈশিষ্ট্যগুলি সনাক্ত করতে শিখতে এটিকে গাইড করতে পারি এবং তারপরে মাটির শ্রেণীবদ্ধ করতে গভীর শিক্ষার স্থাপত্য ব্যবহার করতে পারি।

কৃষিতে গভীর শিক্ষা

এই ব্লগে আমরা কৃষিতে মাটির গুরুত্ব নিয়ে আলোচনা করব। আমরা মেশিন লার্নিং এবং ডিপ লার্নিং মডেল ব্যবহার করে মাটির শ্রেণীবিভাগ করব।

শিক্ষার উদ্দেশ্য

  • আপনি বুঝতে পারবেন কৃষিতে মাটি কতটা গুরুত্বপূর্ণ।
  • আপনি শিখবেন কিভাবে মেশিন লার্নিং অ্যালগরিদম মাটির প্রকারভেদ করতে পারে।
  • আপনি মাটির ধরন শ্রেণীবদ্ধ করতে কৃষিতে একটি গভীর শিক্ষার মডেল বাস্তবায়ন করবেন।
  • আমাদের ভবিষ্যদ্বাণীর যথার্থতা বাড়াতে মাল্টি-স্ট্যাকিং এনসেম্বল শেখার ধারণাটি অন্বেষণ করুন।

এই নিবন্ধটি একটি অংশ হিসাবে প্রকাশিত হয়েছিল ডেটা সায়েন্স ব্লগাথন।

সুচিপত্র

কৃষিতে মাটির ভূমিকা

জৈব পদার্থ, খনিজ পদার্থ, গ্যাস, তরল এবং অন্যান্য পদার্থ যা উদ্ভিদ ও প্রাণী থেকে নির্গত হয় তা গুরুত্বপূর্ণ মাটি গঠন করে, যা কৃষির ভিত্তি। কৃষির ভিত্তি গ্যাস, খনিজ পদার্থ, জৈব পদার্থ এবং অন্যান্য পদার্থ যা উদ্ভিদ এবং প্রাণী থেকে আসে, মাটির সিস্টেম গঠন করে।

ভারতের অর্থনীতি সম্পূর্ণরূপে কৃষির উপর নির্ভরশীল; মাটি ফসলের জন্য গুরুত্বপূর্ণ, এবং এর উর্বরতার কারণে এটি অবাঞ্ছিত আগাছার বিকাশ ঘটায়।

কৃষিতে মাটির ভূমিকা | কৃষিতে গভীর শিক্ষা

আর্দ্রতা এবং তাপমাত্রা হল ভৌত পরিবর্তন যা মাটিতে ছিদ্র এবং কণার গঠনকে প্রভাবিত করে, শিকড়ের বৃদ্ধি, জলের অনুপ্রবেশ এবং উদ্ভিদের উদ্ভব গতিকে প্রভাবিত করে।

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

ডেটা সেটটি

কাগল লিংক

ডেটাসেট | কৃষিতে গভীর শিক্ষা
"
"
"
"

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

আমরা স্কিমেজ লাইব্রেরি ব্যবহার করব ছবিগুলিকে গ্রেস্কেলে রূপান্তর করতে এবং হিস্টোগ্রাম অফ গ্রেডিয়েন্ট (HOG) বৈশিষ্ট্যগুলি বের করতে যা অবজেক্ট সনাক্তকরণের জন্য দরকারী। অবশেষে, আমরা বৈশিষ্ট্যগুলির মানগুলিকে একটি অ্যারেতে সংযুক্ত করব এবং পরে সেগুলিকে মেশিন লার্নিং এবং ডিপ লার্নিং অ্যালগরিদমে ব্যবহার করব।

বৈশিষ্ট্য নিষ্কাশন | কৃষিতে গভীর শিক্ষা
import mahotas as mh
from skimage import color, feature, io
import numpy as np

# Function to extract features from an image
def extract_features(image_path):
    img = io.imread(image_path)
    gray_img = color.rgb2gray(img)  # Converting image to grayscale
    
    # Converting the grayscale image to integer type
    gray_img_int = (gray_img * 255).astype(np.uint8)
    
    # Extracting Haralick features using mahotas
    haralick_features = mh.features.haralick(gray_img_int).mean(axis=0)
    
    # Extracting Histogram of Gradients (HOG) features
    hog_features, _ = feature.hog(gray_img, visualize=True)
    
    # Printing the first few elements of each feature array
    print("Haralick Features:", haralick_features[:5])
    print("HOG Features:", hog_features[:5])
    
    # Concatenating the features into a single array
    all_features = np.concatenate((haralick_features, hog_features))
    
    return all_features

image_path = '/kaggle/input/soil-classification-dataset/Soil-Dataset/Yellow Soil/20.jpg'
features = extract_features(image_path)
print("Extracted Features:", features)
"

মাটির শ্রেণীবিভাগে মেশিন লার্নিং অ্যালগরিদম

এখন, আমরা Kaggle থেকে পাওয়া মাটির ছবিগুলি ব্যবহার করে একটি মেশিন-লার্নিং মডেল তৈরি করি৷

প্রথমত, আমরা সমস্ত লাইব্রেরি আমদানি করব এবং তারপর একটি ফাংশন তৈরি করব extract_features ইমেজ থেকে বৈশিষ্ট্য নিষ্কাশন করতে. চিত্রগুলি তারপর আমদানি এবং প্রক্রিয়া করা হয়, যার মধ্যে গ্রেস্কেলে রূপান্তর করা অন্তর্ভুক্ত থাকে এবং তারপরে আমরা এই বৈশিষ্ট্যগুলি পাই। তারপর, প্রতিটি চিত্রের জন্য বৈশিষ্ট্যগুলি বের করার পরে, লেবেলগুলি ব্যবহার করে এনকোড করা হয় লেবেল এনকোডার।

import os
import numpy as np
import mahotas as mh
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
from sklearn.ensemble import RandomForestClassifier, StackingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score, classification_report
from skimage import color, feature, io

# Function to extract features from an image
def extract_features(image_path):
    img = io.imread(image_path)
    gray_img = color.rgb2gray(img)  # Converting image to grayscale
    gray_img_int = (gray_img * 255).astype(np.uint8)
    haralick_features = mh.features.haralick(gray_img_int).mean(axis=0)
    hog_features, _ = feature.hog(gray_img, visualize=True)
    hog_features_flat = hog_features.flatten()  # Flattening the HOG features
    # Ensuring both sets of features have the same length
    hog_features_flat = hog_features_flat[:haralick_features.shape[0]]
    return np.concatenate((haralick_features, hog_features_flat))

data_dir = "/kaggle/input/soil-classification-dataset/Soil-Dataset"

image_paths = []
labels = []

class_indices = {'Black Soil': 0, 'Cinder Soil': 1, 'Laterite Soil': 2, 
'Peat Soil': 3, 'Yellow Soil': 4}

for soil_class, class_index in class_indices.items():
    class_dir = os.path.join(data_dir, soil_class)
    class_images = [os.path.join(class_dir, image) for image in os.listdir(class_dir)]
    image_paths.extend(class_images)
    labels.extend([class_index] * len(class_images))

# Extracting features from images
X = [extract_features(image_path) for image_path in image_paths]

# Encoding labels
le = LabelEncoder()
y = le.fit_transform(labels)

# Splitting the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Initializing and training a Random Forest Classifier
rf_classifier = RandomForestClassifier(n_estimators=100, random_state=42)
rf_classifier.fit(X_train, y_train)

# Making predictions
y_pred_rf = rf_classifier.predict(X_test)

# Evaluating the Random Forest model
accuracy_rf = accuracy_score(y_test, y_pred_rf)
report_rf = classification_report(y_test, y_pred_rf)

print("Random Forest Classifier:")
print("Accuracy:", accuracy_rf)
print("Classification Report:n", report_rf)
আউটপুট | কৃষিতে গভীর শিক্ষা
আউটপুট

গভীর নিউরাল নেটওয়ার্ক

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

এছাড়াও পড়ুন: ডিপ লার্নিং এবং নিউরাল নেটওয়ার্কের জন্য একটি পরিচায়ক নির্দেশিকা

এখন, কেরাস থেকে অনুক্রমিক API ব্যবহার করে সংজ্ঞায়িত মডেল তৈরি করা যাক। এই মডেলটিতে একটি Conv2D কনভোলিউশন স্তর, MaxPooling2D, একটি সমতল স্তর সমতল, এবং ঘন স্তর ঘন হবে।

অবশেষে, মডেল ব্যবহার করে কম্পাইল করা হয় আদম অপ্টিমাইজার এবং শ্রেণীবদ্ধ ক্রস-এনট্রপি ক্ষতি।

import tensorflow as tf
from tensorflow.keras.preprocessing import image_dataset_from_directory

data_dir = "/kaggle/input/soil-classification-dataset/Soil-Dataset"

# Setting up data generators
batch_size = 32
image_size = (224, 224)

# Using image_dataset_from_directory to load and preprocess the images
train_dataset = image_dataset_from_directory(
    data_dir,
    labels='inferred',
    label_mode='categorical',
    validation_split=0.2,
    subset='training',
    seed=42,
    image_size=image_size,
    batch_size=batch_size,
)

validation_dataset = image_dataset_from_directory(
    data_dir,
    labels='inferred',
    label_mode='categorical',
    validation_split=0.2,
    subset='validation',
    seed=42,
    image_size=image_size,
    batch_size=batch_size,
)

# Displaying the class indices
print("Class indices:", train_dataset.class_names)

model = tf.keras.Sequential([
    tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(224, 224, 3)),
    tf.keras.layers.MaxPooling2D(2, 2),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(64, activation='relu'),
    tf.keras.layers.Dense(len(train_dataset.class_names), activation='softmax')
])

model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

# Training the model
epochs = 10
history = model.fit(train_dataset, epochs=epochs, validation_data=validation_dataset)
"
import numpy as np
from tensorflow.keras.preprocessing import image

# Function to load and preprocess an image for prediction
def load_and_preprocess_image(img_path):
    img = image.load_img(img_path, target_size=image_size)
    img_array = image.img_to_array(img)
    img_array = np.expand_dims(img_array, axis=0)
    img_array /= 255.0  
    return img_array

image_path = '/kaggle/input/soil-classification-dataset/Soil-Dataset/Peat Soil/13.jpg'
new_image = load_and_preprocess_image(image_path)

# Making predictions
predictions = model.predict(new_image)
predicted_class = np.argmax(predictions[0])

# Getting the class label based on the class indices
class_labels = {0: 'Black Soil', 1: 'Cinder Soil', 2: 'Laterite Soil',
 3: 'Peat Soil', 4: 'Yellow Soil'}
predicted_label = class_labels[predicted_class]

# Displaying the prediction
print("Predicted Class:", predicted_class)
print("Predicted Label:", predicted_label)
আউটপুট
আউটপুট

আপনি দেখতে পাচ্ছেন, ভবিষ্যদ্বাণী করা শ্রেণী হল 0, যা কালো মাটি। সুতরাং, আমাদের মডেল সঠিকভাবে মাটির ধরন শ্রেণীবদ্ধ করছে।

প্রস্তাবিত মাল্টি-স্ট্যাকিং এনসেম্বল লার্নিং মডেল আর্কিটেকচার

সার্জারির স্ট্যাকিং ক্লাসিফায়ার বেস ক্লাসিফায়ার দিয়ে আরম্ভ করা হয় এবং a পণ্য সরবরাহ সংশ্লেষণ মেটা-শ্রেণীবদ্ধকারী চূড়ান্ত_আনুমানিক. এটি একটি চূড়ান্ত ভবিষ্যদ্বাণী করতে বেসক্ল্যাসিফায়ারের আউটপুটগুলিকে একত্রিত করে। তারপর, প্রশিক্ষণ এবং ভবিষ্যদ্বাণী করার পরে, নির্ভুলতা গণনা করা হয়।

base_classifiers = [
    ('rf', RandomForestClassifier(n_estimators=100, random_state=42)),
    ('knn', KNeighborsClassifier(n_neighbors=5)),
    ('svm', SVC(kernel='rbf', C=1.0, probability=True)),
    ('nb', GaussianNB())
]

# Initializing the stacking classifier with a logistic regression meta-classifier
stacking_classifier = StackingClassifier(estimators=base_classifiers, 
final_estimator=LogisticRegression())

# Training the stacking classifier
stacking_classifier.fit(X_train, y_train)

# Making predictions with Stacking Classifier
y_pred_stacking = stacking_classifier.predict(X_test)

# Evaluating the Stacking Classifier model
accuracy_stacking = accuracy_score(y_test, y_pred_stacking)
report_stacking = classification_report(y_test, y_pred_stacking)

print("nStacking Classifier:")
print("Accuracy:", accuracy_stacking)
print("Classification Report:n", report_stacking)
"

উপসংহার

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

কী Takeaways

  • কার্যকর ফসল নির্বাচনের জন্য, একজনকে মাটিকে সম্পূর্ণরূপে বুঝতে হবে।
  • কৃষিতে গভীর শিক্ষা একটি শক্তিশালী হাতিয়ার, উদ্ভিদ রোগের পূর্বাভাস দেওয়া থেকে শুরু করে মাটির ধরন এবং পানির চাহিদা।
  • আমরা মাটির ছবি থেকে বৈশিষ্ট্য পেতে বৈশিষ্ট্য নিষ্কাশন সম্পন্ন করেছি.
  • এই ব্লগে, আমরা মাটির শ্রেণিবিন্যাস করার জন্য মেশিন লার্নিং এবং গভীর শিক্ষার মডেল এবং উন্নত নির্ভুলতার জন্য একটি মাল্টি-স্ট্যাকড এনসেম্বল মডেল অন্বেষণ করেছি।

সচরাচর জিজ্ঞাস্য

প্রশ্ন ১. কেন সঠিকভাবে মাটির শ্রেণিবিন্যাস কৃষিতে গুরুত্বপূর্ণ?

উ: উপযুক্ত ফসল নির্বাচন এবং আগাছা বৃদ্ধি শনাক্ত করার জন্য এটি গুরুত্বপূর্ণ।

প্রশ্ন ২. মাটি শনাক্তকরণে কী কী বৈশিষ্ট্য বিবেচনা করা হয়?

উ: বালি, কাদামাটি, পলি, পিট এবং দোআঁশ সহ বৈশিষ্ট্যগুলি বিবেচনা করা হয়।

Q3. এই বিষয়ে প্রথাগত মেশিন লার্নিং থেকে গভীর শিক্ষা কীভাবে আলাদা?

A. গভীর শিক্ষা মডেলটিকে বুদ্ধিমান সিদ্ধান্ত নিতে দেয়, যখন ঐতিহ্যগত মেশিন লার্নিং ডেটা ব্যাখ্যা করে সিদ্ধান্ত নেয়।

Q4. প্রস্তাবিত মাল্টি-স্ট্যাকিং এনসেম্বল মডেলের ভূমিকা কী?

A. মাল্টি-স্ট্যাকিং এনসেম্বল মডেল মাটির ধরন শ্রেণীবিভাগের নির্ভুলতা বাড়ায়।

এই নিবন্ধে দেখানো মিডিয়া Analytics বিদ্যার মালিকানাধীন নয় এবং লেখকের বিবেচনার ভিত্তিতে ব্যবহার করা হয়।

সময় স্ট্যাম্প:

থেকে আরো বিশ্লেষণ বিদ্যা