Derin Öğrenme Modellerini PyTorch, TensorFlow ve MATLAB ile Dönüştürme
İçindekiler
ToggleBu yazıda, derin öğrenme modellerinin PyTorch, TensorFlow ve MATLAB platformları arasında nasıl dönüştürülebileceğine ve bu dönüşümün sağladığı avantajlara değineceğiz. Özellikle PyTorch model dönüştürme ve TensorFlow model aktarımı süreçleri, farklı platformlarda çalışan araştırmacılar için kritik öneme sahiptir.
Günümüzdeki akademik çalışmalar, öğrenci projeleri ya da endüstriyel uygulamalarda, sıklıkla birden fazla yazılımın birlikte kullanılması gerekebilmektedir. Bu durum, özellikle farklı uzmanlık alanlarından gelen ekiplerin birlikte çalıştığı, çeşitli donanım altyapılarının söz konusu olduğu projelerde yaygın olarak karşımıza çıkmaktadır. MATLAB’in de yeteneklerine baktığımızda, farklı platformlarla birlikte çalışabilme özelliği dikkat çekmektedir. Mühendislik ve bilimsel uygulama çalışmalarında da bu durum çok yaygındır.

MATLAB, bu ihtiyaca yanıt verebilecek şekilde en popüler yapay zekâ kütüphanelerinden ikisi olan PyTorch ve TensorFlow gibi popüler derin öğrenme platformlarıyla birlikte çalışabilme yeteneğine sahiptir. Bu bağlamda MATLAB derin öğrenme iş akışları, mühendislik ve bilimsel uygulamalarda yaygın olarak tercih edilmektedir. ONNX (Open Neural Network Exchange) formatı sayesinde de farklı modeller farklı platformlar arasında taşınabilir hale gelmektedir. Bu durum geliştirme sürecini hızlandırırken modelin ortamlarda yeniden kullanılmasına da olanak tanımaktadır.
Farklı derin öğrenme platformları arasında model dönüşümü hem esneklik hem de iş birliği açısından geliştiricilere büyük bir kolaylık sunmaktadır.
Bu blog yazımızda, sizlere MATLAB, TensorFlow veya PyTorch fonksiyonlarını kullanarak algoritmalarınızın gidişatına nasıl yön verebileceğinizi göstereceğiz. Böylece derin öğrenme eğitimi veya endüstriyel projelerinizde doğru iş akışını seçebilirsiniz.
- Modelleri TensorFlow ve PyTorch’tan MATLAB’a aktarma
- Modelleri MATLAB’den TensorFlow ve PyTorch’a aktarma
MATLAB, PyTorch® ve TensorFlow™ arasında derin öğrenme modellerini dönüştürmek için doğru fonksiyonları ve diğer kaynakları gösteren blog yazımızı okumaya başlamadan önce iki kaynağı inceleyebilirsiniz; Derin Öğrenme Araç Kutusu, TensorFlow, PyTorch ve ONNX Arasında Birlikte Çalışabilirlik ve TensorFlow, PyTorch ve ONNX’ten Modelleri İçe Aktarmaya İlişkin İpuçları.
Modelleri MATLAB’e Aktarma
PyTorch veya TensorFlow’dan modelleri sadece bir satır kodla içe aktarabilirsiniz. Bu sayede farklı platformlarda geliştirilmiş ağları doğrudan MATLAB derin öğrenme ortamına taşıyabilir ve üzerinde işlem yapabilirsiniz.
![]() | ![]() | ![]() | |
Ne? | PyTorch modellerini içe aktarın. | TensorFlow modellerini içe aktarın. | PyTorch ve TensorFlow modellerini etkileşimli olarak içe aktarın. |
Nasıl? | importNetworkFromPyTorch fonksiyonunu kullanın. | importNetworkFromTensorFlow fonksiyonunu kullanın. | Deep Network Designer uygulamasını kullanın. |
Ne zaman? | R2022b’de tanıtıldı. | R2023b’de tanıtıldı. | İçe aktarma özelliği R2023b’de tanıtıldı. |
Hızlıca Bir Örnek Yapalım
Önceden eğitilmiş bir PyTorch görüntü sınıflandırma modelini MATLAB ortamına nasıl aktarabileceğimizi adım adım inceleyelim.
TorchVision kütüphanesinde yer alan MnasNet modeli kullanılacaktır. Bu model, daha önce PyTorch’ta eğitilmiş ve doğruluk gibi performans ölçütleri değerlendirilmiştir.
import torch from torchvision import models model = models.mnasnet1_0(pretrained=True) |
İlk olarak PyTorch modelini gözlemleyerek dönüştürme sürecine hazırlıyoruz. Bu adım, modelin giriş verisine verdiği yanıtı takip ederek çalışma şeklini kaydetmemizi sağlar. PyTorch modelinin nasıl izleneceği hakkında daha fazla bilgi edinmek için Torch belgelerine gidin: Bir fonksiyonu izleme başlığına göz atabilirsiniz. İzleme işleminin ardından, PyTorch modelini kaydederek MATLAB ortamına aktarmaya hazır hale getiriyoruz.
X = torch.rand(1,3,224,224) traced_model = torch.jit.trace(model.forward,X) traced_model.save(“traced_mnasnet1_0.pt”) |
Şimdi MATLAB tarafına dönebiliriz ve ONNX formatı üzerinden dışa aktardığımız modeli, importNetworkFromPyTorch fonksiyonunu kullanarak MATLAB ortamına içeri aktarabiliriz. Bu adımda, modelin giriş boyutlarını belirtmek için PyTorchInputSizes ad-değer bağımsız değişkenini belirtmemiz gerekir.
net = importNetworkFromPyTorch(“mnasnet1_0.pt”,PyTorchInputSizes=[NaN,3,224,224] |
net = dlnetwork with properties: Layers: [153×1 nnet.cnn.layer.Layer] Connections: [162×2 table] Learnables: [210×3 table] State: [104×3 table] InputNames: {‘InputLayer1’} OutputNames: {‘aten__linear12’} Initialized: 1 View summary with summary. |
Böylece içe aktarma fonksiyonu bir grup görüntü için giriş katmanını otomatik olarak oluşturur ve workspace’mize ekler. Daha sonrasında içeriye aldığımız modeli sınıflandırmak istediğiniz görüntü için kullanmak üzere, girdimizi modelimize uygun formatta düzenleriz ve giriş boyutlarını modelimizin giriş katmanına göre uygun hale getiririz.
Im_og = imread(“peacock.jpg”); InputSize = [224 224 3]; Im = imresize(Im_og,InputSize(1:2)); |
MnasNet’in girdileri için daha fazla ön işleme gerekir. Bu sebeple görüntüyü yeniden ölçeklendirmemiz gerekmektedir. Ardından, eğitim görüntülerinin ortalamasını çıkarıp eğitim görüntülerinin standart sapmasına bölerek görüntüyü normalleştiririz. Daha fazla bilgi için Girdi Verisi Ön İşleme bölümünü inceleyebilirsiniz.
Im = rescale(Im,0,1); meanIm = [0.485 0.456 0.406]; stdIm = [0.229 0.224 0.225]; Im = (Im – reshape(meanIm,[1 1 3]))./reshape(stdIm,[1 1 3]); |
Görüntüyü bir dlarray nesnesine dönüştürürüz ve “SSCB” (spatial, spatial, channel, batch) boyutlarıyla biçimlendiririz. Böylece MATLAB, görüntüyü derin öğrenme modelinde doğru şekilde işler.
Im_dlarray = dlarray(single(Im),”SSCB”); |
Artık görüntüyü sınıflandırıp tahmin edilen etiket değerini bulma aşamasına geldik. Bunun için de aşağıdaki kodu kullanabiliriz.
prob = predict(net,Im_dlarray); [~,label_ind] = max(prob); |
Son olarak görüntüyü ve sınıflandırma sonucunu görselleştirerek sonucu inceleyebiliriz.
imshow(Im_og) title(strcat(“Classification Result: “,ClassNames(label_ind)),FontSize=16) |

TensorFlow da bir modeli içe aktarmak PyTorch’tan bir modeli içe aktarmaya oldukça benzerdir. Elbette bunun yerine importNetworkFromTensorFlow fonksiyonunu kullanmamız gerekir. Bunun yanında TensorFlow modelinizin de SavedModel biçiminde olması ve Python tarafında aşağıdaki kodu kullanarak kaydedilmesi gerektiğini unutmamalıyız.
model.save(“myModelTF”) |
Daha fazla örnek için importNetworkFromPyTorch ve importNetworkFromTensorFlow fonksiyonlarının referans sayfalarına ve Harici Platformlardan Önceden Eğitilmiş Ağlar hakkındaki dokümantasyon sayfasına göz atabilirsiniz.
Neden Modelleri MATLAB’e Aktarmalısınız?
Kısaca söylemek gerekirse, bir modeli MATLAB’e aktardığınızda artık o model bir MATLAB ağı haline gelir. Bu da şu anlama gelir: Aktardığınız ağ ile MATLAB’in yerleşik araçlarını kullanarak aşağıdaki tüm işlemleri gerçekleştirebilirsiniz. Daha fazla bilgi için Deep Learning Toolbox’a göz atabilirsiniz.
Görev | Örnek | Daha Fazla Kaynak | |
![]() | Kolayca transfer öğrenimi gerçekleştirin ve ağı yeniden eğitin. | Derin Ağ Tasarımcısı Kullanarak Transfer Öğrenimi için Ağ Hazırlama | Transfer Öğrenimi için Derin Sinir Ağını İçe Aktarın |
![]() | Aktivasyonları görselleştirin, kararları açıklayın ve ağın sağlamlığını doğrulayın (Deep Learning Toolbox Doğrulama Kitaplığı ile). | LIME Kullanarak Ağ Tahminlerini Anlayın | Derin Sinir Ağlarını Görselleştirme ve Doğrulama |
![]() | Ağı Simulink’te simüle edin ve daha büyük bir sistem içindeki performansını test edin. | Simulink’te Görüntüleri İçe Aktarılan TensorFlow Ağı ile Sınıflandırma | Simulink ile Derin Öğrenme |
![]() | Ağı niceleme, projeksiyon veya budama ile sıkıştırın. | Projeksiyon Kullanarak Sinir Ağını Sıkıştırma | Niceleme, Projeksiyon ve Budama |
![]() | Ağ için otomatik olarak C/C++, CUDA ve HDL kodu oluşturun. | Derin Öğrenme Ağları için Kod Üretimi | Kod Üretimi ve Dağıtımı |
Bu avantajlar sayesinde MATLAB, yalnızca model dönüştürme değil, aynı zamanda endüstriyel yapay zekâ uygulamaları için eksiksiz bir geliştirme ortamı sunar.
MATLAB’den Modelleri Dışa Aktarma
Modelleri doğrudan TensorFlow’a aktarabilirsiniz. Bir modeli PyTorch’a aktarmak için önce modeli ONNX model formatına dönüştürmeniz gerekir.
![]() | ![]() | |
Ne? | Modelleri TensorFlow’a aktarın. | Modelleri PyTorch’a aktarın. |
Nasıl? | exportNetworkToTensorFlow işlevini kullanın. | exportONNXNetwork işlevini kullanarak ONNX üzerinden dışa aktarın. |
Ne zaman? | R2022b’de tanıtıldı. | ONNX dışa aktarımı R2018a’da tanıtıldı. |
Hızlıca Bir Örnek Yapalım
Şimdi, imagePretrainedNetwork kullanarak önceden eğitilmiş SqueezeNet evrişimsel ağını MATLAB ortamına yükleyelim. R2024a versiyonunda tanıtılan bu fonksiyon, önceden eğitilmiş görüntü sınıflandırma ağlarını yüklemenin en kolay ve önerilen yoludur.
[net,ClassNames] = imagePretrainedNetwork(“squeezenet”); |
Ağı TensorFlow’a direkt olarak aktarabiliriz. exportNetworkToTensorFlow fonksiyonu, TensorFlow modelini Python paketi myModel’e kaydeder.
exportNetworkToTensorFlow(net,”myModel”) |
Böylelikle dışa aktarma işlemini tamamlarız.
Python’da modeli test etmek istediğimizde, MATLAB’de bulunan bir görüntüyü kullanabiliriz. Sınıflandırmak istediğimiz görüntüyü okur ve ağın giriş boyutuna göre yeniden boyutlandırırız.
Im = imread(“peacock.jpg”); InputSize = net.Layers(1).InputSize; Im = imresize(Im,InputSize(1:2)); |
2 boyutlu görüntü verilerini, MATLAB sıralamasından (HWCN) TensorFlow sıralamasına (NHWC) geçiririz; burada H, W ve C sırasıyla görüntünün yüksekliği, genişliği ve kanal sayısıdır ve N görüntü sayısıdır. Daha fazla bilgi için Girdi Boyutu Sıralaması bölümünü inceleyebilirsiniz. Son olarak, görüntüyü bir MAT dosyasına kaydederiz.
ImTF = permute(Im,[4,1,2,3]); filename = “peacock.mat”; save(filename,”ImTF”) |
Aşağıdaki kod, dışa aktarılan modeli Python’da tahmin etmek için nasıl kullanabileceğinizi ve SavedModel biçiminde nasıl kaydedeceğinizi gösterir. İlk olarak, myModel paketinden dışa aktarılan TensorFlow modelini yüklüyoruz.
import myModel model = myModel.load_model() |
Dışa aktarılan modeli TensorFlow SavedModel formatında kaydedebilirsiniz. Modeli SavedModel formatında kaydetmek isteğe bağlıdır. Derin öğrenme iş akışlarını doğrudan modelle gerçekleştirebilirsiniz.
model.save(“myModelTF”) |
Daha sonrasında da görüntüyü, dışa aktarılan model ile sınıflandırırız.
import scipy.io as sio x = sio.loadmat(“peacock.mat”) x = x[“ImTF”] import numpy as np x_np = np.asarray(x, dtype=np.float32) scores = model.predict(x_np) |
Derin sinir ağlarını TensorFlow’a dışa aktarma hakkında daha fazla bilgi için bu blog gönderisini inceleyebilirsiniz. Daha fazla örnek için exportNetworkToTensorFlow ve exportONNXNetwork referans sayfalarına ve Derin Sinir Ağlarını Dışa Aktarma ile ilgili belgeler sayfasına göz atın.
MATLAB ve Simulink’te Python Tabanlı Modelleri Birlikte Yürütme
Model performansını ve sistem entegrasyonunu test etmek için Python tabanlı yapay zekâ modellerini doğrudan MATLAB iş akışımızda veya Simulink sistemimizde kullanabiliriz.
Karşılaştırma: Birlikte Yürütme (Co-Execution) & Model Dönüştürme (Model Conversion)
Tabii daha öncesinde birlikte yürütme ve model dönüştürme konularına geçmeden önce bunların ne olduğunu kısaca özetleme ihtiyacı hissediyorum.
Python’da yazılmış yapay zekâ modelini olduğu gibi, dönüştürmeden MATLAB veya Simulink içinde doğrudan çalıştırmak istiyorsak buna Co-Execution denir. Bu yol haritasında modelimizi hızlıca test edip kullanabiliriz. Fakat Python modelini MATLAB formatına çevirip, MATLAB’in kendi araçlarıyla kullanmak istiyorsak buna Model Conversion denir. Bu sayede daha hızlı çalışma ve MATLAB içi işlemler kolaylaşır.
Yani Co-Execution hızlı ve pratik; Model Conversion ise daha uyumlu ve performanslıdır.
İlk olarak, MATLAB ortamında bir PyTorch veya TensorFlow modelini birlikte yürütmeyi, harici platform modelini bir MATLAB ağına dönüştürmekle karşılaştıralım. Böylece hangi iş akışının algoritmamıza en uygun olduğu kararına varabiliriz.
Birlikte Yürütme (Co-Execution) | Model Dönüştürme (Model Conversion) | |
Her PyTorch ve TensorFlow modeli için çalışır | Evet | Hayır |
Simulink’te model simülasyonu | Evet | Evet |
Otomatik olarak kod üretme | Hayır | Evet |
Açıklanabilirlik tekniklerini uygulayın | Yalnızca nesne algılama için | Evet |
Sağlamlık ve güvenilirliği doğrulayın | Hayır | Evet |
Düşük kodlu (Low-Code) yapay zekâ uygulamalarını kullanın | Hayır | Evet |
Ağı sıkıştır | Hayır | Evet |
Blog yazımızın sonuna yaklaşırken, sizler için faydalı olabileceğini düşündüğümüz bazı kaynakları paylaşmak istiyoruz. Daha önce yayınladığımız MATLAB ve Python Birlikte Nasıl Kullanılır? başlıklı blog yazımızı inceleyebilir ve ayrıca Python’da görüntü işleme için sıkça tercih edilen OpenCV kütüphanesinin MATLAB Script’inde nasıl çalıştırılacağını anlattığım videoyu izleyebilirsiniz.
Yazar Adı
Doğukan Mehmet Kılınç
Yazar Ünvanı
Yapay Zeka ve Makine Öğrenmesi Mühendisi, FİGES
Bloglar
-
STANDART SEYİR ÇEVRİMLERİ VE MODEL TABANLI SİMÜLASYONDA ELEKTRİKLİ ARAÇTA HARCANAN ENERJİ KARŞILAŞTIRMASI