الزراعة والتعلم العميق: تحسين إنتاجية التربة والمحاصيل

الزراعة والتعلم العميق: تحسين إنتاجية التربة والمحاصيل

عقدة المصدر: 3066255

المُقدّمة

الزراعة هي أكثر من مجرد وظيفة للعديد من الهنود؛ انها طريقة للحياة. إنها الوسيلة التي يدعمون من خلالها سبل عيشهم ويساهمون بشكل كبير في اقتصاد الهند. يعد تحديد نوع التربة التي تحتوي على جزيئات الطين والرمل والطمي بالنسب الخاصة أمرًا مهمًا لاختيار المحصول المناسب وتحديد نمو الأعشاب الضارة. اكتشف إمكانات التعلم العميق في الزراعة. فهم أهمية أنواع التربة والكشف عن الأعشاب الضارة في الهند.

تعلم عميق هي تقنية ناشئة مفيدة في كل مجال. تم تطبيق التعلم العميق بشكل شائع في الزراعة الذكية عبر نطاقات المراقبة الميدانية، والعمليات الميدانية، والروبوتات، والتنبؤ بالتربة والمياه والظروف المناخية، ومراقبة أنواع الأراضي والمحاصيل على مستوى المناظر الطبيعية. يمكننا تغذية صورة التربة لبنية التعلم العميق، وتوجيهها لتعلم اكتشاف الميزات، ثم استخدام بنية التعلم العميق لتصنيف التربة.

التعلم العميق في الزراعة

في هذه المدونة سنناقش أهمية التربة في الزراعة. سنقوم بتصنيف التربة باستخدام نماذج التعلم الآلي والتعلم العميق.

أهداف التعلم

  • سوف تفهم مدى أهمية التربة في الزراعة.
  • سوف تتعلم كيف يمكن لخوارزميات التعلم الآلي تصنيف أنواع التربة.
  • سوف تقوم بتنفيذ نموذج التعلم العميق في الزراعة لتصنيف أنواع التربة.
  • استكشف مفهوم التعلم الجماعي متعدد التكديس لزيادة دقة تنبؤاتنا.

تم نشر هذه المقالة كجزء من مدونة علوم البيانات.

جدول المحتويات

دور التربة في الزراعة

تشكل المواد العضوية والمعادن والغازات والسوائل وغيرها من المواد التي تفرزها النباتات والحيوانات تربة مهمة وأساسًا للزراعة. يكمن أساس الزراعة في الغازات والمعادن والمواد العضوية وغيرها من المواد التي تأتي من النباتات والحيوانات، وتشكل نظام التربة.

يعتمد اقتصاد الهند بشكل كامل على الزراعة؛ تعتبر التربة مهمة للمحاصيل، وتؤدي إلى نمو الأعشاب الضارة غير المرغوب فيها بسبب خصوبتها.

دور التربة في الزراعة | التعلم العميق في الزراعة

تعتبر الرطوبة ودرجة الحرارة من المتغيرات الفيزيائية التي تؤثر على تكوين المسام والجسيمات في التربة، مما يؤثر على نمو الجذور، وترسيب المياه، وسرعة ظهور النبات.

ولكن في الأساس، تحتوي التربة على جزيئات من الرمل والطين. ووسط جزيئات التربة المتوفرة بشكل كبير، يتواجد الطين بكثرة في موقع الاستكشاف. يرجع توفر جزيئات الطين على السطح إلى التغذية الوفيرة المتوفرة. الخث والطميية بالكاد موجودة. والتربة الطينية واسعة بينهما حيث يتم الاحتفاظ بالمياه.

بيانات

رابط كاجل

مجموعة البيانات | التعلم العميق في الزراعة
"
"
"
"

يعد استخراج الميزات إحدى الخطوات الرئيسية لبناء نموذج جيد للتعلم العميق. من المهم تحديد الميزات التي قد تكون ضرورية لبناء خوارزميات التعلم الآلي. سوف نستخدم ماهوتاس مكتبة لاستخراج ميزات Haralick، التي تحتوي على معلومات مكانية وملمسية للصور.

سنستخدم مكتبة Skiimage لتحويل الصور إلى تدرج رمادي ولاستخراج ميزات الرسم البياني للتدرج (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)
الإخراج | التعلم العميق في الزراعة
OUTPUT

الشبكات العصبية العميقة

وهو يعمل على أساس الوحدات الحسابية وعدد الخلايا العصبية. تقبل كل خلية عصبية المدخلات وتوفر المخرجات. يتم استخدامه لزيادة الدقة وإجراء تنبؤات أفضل، بينما تعتمد خوارزميات التعلم الآلي على تفسير البيانات، وسيتم اتخاذ القرارات بناءً عليها.

اقرأ أيضا: دليل تمهيدي للتعلم العميق والشبكات العصبية

الآن، دعونا نبني النموذج المحدد باستخدام Sequential API من Keras. سيحتوي هذا النموذج على طبقة ملتوية 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)
OUTPUT
OUTPUT

كما ترون، الفئة المتوقعة هي 0، وهي التربة السوداء. لذلك، يقوم نموذجنا بتصنيف نوع التربة بشكل صحيح.

البنى المقترحة لنموذج التعلم الجماعي متعدد التكديس

StackingClassifier تتم تهيئته باستخدام baseClassifiers و الانحدار اللوجستي المصنف الفوقية Final_estimator. يجمع هذا مخرجات المصنفات الأساسية لإجراء تنبؤ نهائي. ثم، بعد التدريب والتنبؤ، يتم حساب الدقة.

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)
"

وفي الختام

التربة عنصر مهم في إنتاج محصول جيد. من المهم معرفة نوع التربة الضروري لإنتاج هذا المحصول المحدد. لذلك، يصبح تصنيف نوع التربة أمرًا مهمًا. نظرًا لأن تصنيف نوع التربة يدويًا يعد مهمة تستغرق وقتًا طويلاً، وبالتالي يصبح استخدام نماذج التعلم العميق لتصنيفها أمرًا سهلاً. هناك العديد من نماذج التعلم الآلي ونماذج التعلم العميق لتنفيذ بيان المشكلة هذا. يعتمد اختيار الأفضل على جودة وكمية البيانات الموجودة في مجموعة البيانات وبيان المشكلة المطروحة. هناك طريقة أخرى لاختيار أفضل خوارزمية وهي تقييم كل منها. يمكننا القيام بذلك عن طريق قياس الدقة، ومدى قدرتهم على تصنيف التربة بشكل صحيح. أخيرًا، قمنا بتنفيذ نموذج مجموعة متعدد التراص، باستخدام نماذج متعددة لبناء أفضل نموذج.

الوجبات السريعة الرئيسية

  • لاختيار المحاصيل بشكل فعال، ينبغي للمرء أن يفهم التربة تماما.
  • يعد التعلم العميق في الزراعة أداة قوية، بدءًا من التنبؤ بأمراض النبات وحتى أنواع التربة واحتياجات المياه.
  • لقد قمنا باستخراج الميزات للحصول على ميزات من صور التربة.
  • في هذه المدونة، استكشفنا نماذج التعلم الآلي والتعلم العميق لتصنيف التربة ونموذج المجموعة المتعددة الطبقات لتحسين الدقة.

الأسئلة المتكررة

س1. ما أهمية تصنيف التربة بشكل صحيح في الزراعة؟

ج: من المهم اختيار المحاصيل المناسبة وتحديد نمو الأعشاب الضارة.

س2. ما هي السمات الرئيسية التي تؤخذ في الاعتبار عند تحديد التربة؟

أ. يتم أخذ الميزات، بما في ذلك الرمل والطين والطمي والجفت والطميية، في الاعتبار.

س3. كيف يختلف التعلم العميق عن التعلم الآلي التقليدي في هذا الموضوع؟

ج: يسمح التعلم العميق للنموذج باتخاذ قرارات ذكية، بينما يتخذ التعلم الآلي التقليدي القرارات من خلال تفسير البيانات.

س 4. ما هو دور نموذج المجموعة متعدد التراص المقترح؟

أ. يعمل نموذج مجموعة التراص المتعدد على زيادة دقة تصنيف نوع التربة.

الوسائط الموضحة في هذه المقالة ليست مملوكة لـ Analytics Vidhya ويتم استخدامها وفقًا لتقدير المؤلف.

الطابع الزمني:

اكثر من تحليلات Vidhya