{"id":30511,"date":"2025-09-28T18:42:17","date_gmt":"2025-09-28T15:42:17","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=30511"},"modified":"2025-09-28T18:42:17","modified_gmt":"2025-09-28T15:42:17","slug":"her-ml-ai-gelistiricisinin-onnx-hakkinda-bilmesi-gerekenler","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/her-ml-ai-gelistiricisinin-onnx-hakkinda-bilmesi-gerekenler\/","title":{"rendered":"Her ML\/AI Geli\u015ftiricisinin ONNX Hakk\u0131nda Bilmesi Gerekenler"},"content":{"rendered":"<p><body><\/p>\n<h2>Her ML\/AI Geli\u015ftiricisinin ONNX Hakk\u0131nda Bilmesi Gerekenler<\/h2>\n<p>Makine \u00f6\u011frenimi ve yapay zeka modelleri geli\u015ftirmek heyecan verici bir s\u00fcre\u00e7tir, ancak bu modelleri \u00fcretim ortam\u0131na da\u011f\u0131tmak genellikle karma\u015f\u0131k bir hal alabilir. Farkl\u0131 framework&#8217;ler (PyTorch, TensorFlow, Keras, scikit-learn vb.), farkl\u0131 donan\u0131mlar (CPU, GPU, Edge cihazlar\u0131) ve farkl\u0131 i\u015fletim sistemleri aras\u0131nda uyumluluk sorunlar\u0131, geli\u015ftiricilerin kar\u015f\u0131s\u0131na \u00e7\u0131kan en b\u00fcy\u00fck engellerden biridir. \u0130\u015fte tam bu noktada ONNX (Open Neural Network Exchange) devreye girerek bu karma\u015f\u0131kl\u0131\u011f\u0131 ortadan kald\u0131rmay\u0131 hedefler.<\/p>\n<p>Bu rehberde, her ML\/AI geli\u015ftiricisinin ONNX hakk\u0131nda bilmesi gereken temel bilgileri, pratik uygulamalar\u0131 ve ipu\u00e7lar\u0131n\u0131 bulacaks\u0131n\u0131z. ONNX&#8217;in ne oldu\u011fundan, modelleri nas\u0131l d\u00f6n\u00fc\u015ft\u00fcrece\u011finize, ONNX Runtime ile \u00e7\u0131kar\u0131m (inference) yapmaya ve geli\u015fmi\u015f optimizasyon tekniklerine kadar geni\u015f bir yelpazeyi ele alaca\u011f\u0131z.<\/p>\n<h3>ONNX Nedir ve Neden \u00d6nemlidir?<\/h3>\n<p>ONNX, makine \u00f6\u011frenimi modelleri i\u00e7in a\u00e7\u0131k bir format standard\u0131d\u0131r. Temel amac\u0131, farkl\u0131 makine \u00f6\u011frenimi framework&#8217;leri aras\u0131nda model ta\u015f\u0131nabilirli\u011fini ve birlikte \u00e7al\u0131\u015fabilirli\u011fi sa\u011flamakt\u0131r. Bir ONNX modeli, modelin hesaplama grafi\u011fini (operat\u00f6rler ve tens\u00f6rler) ve \u00f6nceden e\u011fitilmi\u015f a\u011f\u0131rl\u0131klar\u0131n\u0131 i\u00e7eren bir protokold\u00fcr.<\/p>\n<h4>ONNX&#8217;in Sa\u011flad\u0131\u011f\u0131 Temel Avantajlar:<\/h4>\n<p>1.  <strong>Framework Ba\u011f\u0131ms\u0131zl\u0131\u011f\u0131:<\/strong> Modellerinizi PyTorch&#8217;ta e\u011fitip ONNX&#8217;e d\u00f6n\u00fc\u015ft\u00fcrebilir, ard\u0131ndan TensorFlow Lite veya ba\u015fka bir ortamda da\u011f\u0131tabilirsiniz. Bu, geli\u015ftiricilere framework se\u00e7imi konusunda b\u00fcy\u00fck bir esneklik sunar.<br \/>\n2.  <strong>Performans Optimizasyonu:<\/strong> ONNX Runtime gibi y\u00fcksek performansl\u0131 \u00e7\u0131kar\u0131m motorlar\u0131, ONNX format\u0131ndaki modelleri CPU, GPU (NVIDIA CUDA, AMD ROCm), NPU gibi farkl\u0131 donan\u0131m h\u0131zland\u0131r\u0131c\u0131lar\u0131nda optimize edilmi\u015f bir \u015fekilde \u00e7al\u0131\u015ft\u0131rabilir. Bu, genellikle orijinal framework&#8217;\u00fcn kendi \u00e7\u0131kar\u0131m motorundan daha h\u0131zl\u0131 sonu\u00e7lar verir.<br \/>\n3.  <strong>Da\u011f\u0131t\u0131m Kolayl\u0131\u011f\u0131:<\/strong> Tek bir standart format, modellerin bulut, sunucu, mobil ve edge cihazlar gibi \u00e7e\u015fitli da\u011f\u0131t\u0131m hedeflerine kolayca entegre edilmesini sa\u011flar.<br \/>\n4.  <strong>Model Optimizasyonu:<\/strong> ONNX format\u0131, nicelikle\u015ftirme (quantization), grafik basitle\u015ftirme ve katman birle\u015ftirme gibi model optimizasyon tekniklerinin uygulanmas\u0131n\u0131 kolayla\u015ft\u0131r\u0131r. Bu, model boyutunu k\u00fc\u00e7\u00fclt\u00fcr ve \u00e7\u0131kar\u0131m h\u0131z\u0131n\u0131 art\u0131r\u0131r.<br \/>\n5.  <strong>Ara\u015ft\u0131rma ve \u00dcretim K\u00f6pr\u00fcs\u00fc:<\/strong> Ara\u015ft\u0131rma ekibiniz PyTorch kullan\u0131rken, \u00fcretim ekibiniz C++ tabanl\u0131 bir sistemde da\u011f\u0131t\u0131m yap\u0131yorsa, ONNX bu iki d\u00fcnya aras\u0131nda sorunsuz bir k\u00f6pr\u00fc g\u00f6revi g\u00f6r\u00fcr.<\/p>\n<p>K\u0131sacas\u0131, ONNX makine \u00f6\u011frenimi modellerinin &#8220;evrensel dili&#8221; olmay\u0131 hedefler. Geli\u015ftiricilere daha fazla kontrol, esneklik ve performans sunar.<\/p>\n<h3>ONNX Modelleri Olu\u015fturma ve D\u00f6n\u00fc\u015ft\u00fcrme<\/h3>\n<p>Makine \u00f6\u011frenimi modellerini ONNX format\u0131na d\u00f6n\u00fc\u015ft\u00fcrmek, genellikle e\u011fitildi\u011fi framework&#8217;\u00fcn kendi ara\u00e7lar\u0131 veya \u00fc\u00e7\u00fcnc\u00fc taraf k\u00fct\u00fcphaneler arac\u0131l\u0131\u011f\u0131yla yap\u0131l\u0131r. \u0130\u015fte en yayg\u0131n kullan\u0131lan framework&#8217;lerden baz\u0131lar\u0131 i\u00e7in \u00f6rnekler:<\/p>\n<h4>PyTorch Modellerini ONNX&#8217;e D\u00f6n\u00fc\u015ft\u00fcrme<\/h4>\n<p>PyTorch, modelleri ONNX&#8217;e aktarmak i\u00e7in yerle\u015fik bir <code>torch.onnx.export<\/code> fonksiyonuna sahiptir.<\/p>\n<pre><code class=\"language-python\">\nimport torch\nimport torch.nn as nn\nimport os\n\n<h2>1. Basit bir PyTorch modeli tan\u0131mlayal\u0131m<\/h2>\nclass SimpleModel(nn.Module):\n    def __init__(self):\n        super(SimpleModel, self).__init__()\n        self.fc1 = nn.Linear(10, 5)\n        self.relu = nn.ReLU()\n        self.fc2 = nn.Linear(5, 2)\n\n    def forward(self, x):\n        x = self.fc1(x)\n        x = self.relu(x)\n        x = self.fc2(x)\n        return x\n\nmodel = SimpleModel()\n\n<h2>2. Dummy giri\u015f tens\u00f6r\u00fc olu\u015ftural\u0131m (modelin bekledi\u011fi boyutta)<\/h2>\n<h2>Bu, ONNX grafi\u011finin olu\u015fturulmas\u0131 i\u00e7in gereklidir.<\/h2>\ndummy_input = torch.randn(1, 10, requires_grad=True) \n\n<h2>3. Modeli ONNX format\u0131na aktaral\u0131m<\/h2>\nonnx_path = \"simple_model.onnx\"\ntorch.onnx.export(\n    model,                      # D\u00f6n\u00fc\u015ft\u00fcr\u00fclecek model\n    dummy_input,                # Modelin bekledi\u011fi dummy giri\u015f\n    onnx_path,                  # Kaydedilecek ONNX dosyas\u0131n\u0131n yolu\n    export_params=True,         # E\u011fitilmi\u015f parametreleri dahil et\n    opset_version=17,           # ONNX operat\u00f6r seti versiyonu (genellikle en g\u00fcncel veya yayg\u0131n olan)\n    do_constant_folding=True,   # Sabit katlamay\u0131 etkinle\u015ftir (optimizasyon)\n    input_names=['input'],      # Giri\u015f tens\u00f6r\u00fcn\u00fcn ad\u0131\n    output_names=['output'],    # \u00c7\u0131k\u0131\u015f tens\u00f6r\u00fcn\u00fcn ad\u0131\n    dynamic_axes={              # Dinamik eksenleri tan\u0131mla (de\u011fi\u015fken boyutlu giri\u015fler i\u00e7in)\n        'input': {0: 'batch_size'},  # Giri\u015fteki 0. eksen (batch) dinamik olabilir\n        'output': {0: 'batch_size'} # \u00c7\u0131k\u0131\u015ftaki 0. eksen (batch) dinamik olabilir\n    }\n)\n\nprint(f\"Model {onnx_path} konumuna ba\u015far\u0131yla kaydedildi.\")\n\n<h2>Kaydedilen ONNX dosyas\u0131n\u0131 do\u011frulayal\u0131m<\/h2>\nif os.path.exists(onnx_path):\n    print(\"ONNX dosyas\u0131 ba\u015far\u0131yla olu\u015fturuldu.\")\nelse:\n    print(\"ONNX dosyas\u0131 olu\u015fturulamad\u0131.\")\n\n<\/code><\/pre>\n<h4>Pratik \u0130pu\u00e7lar\u0131:<\/h4>\n<p><em>   <strong><code>dummy_input<\/code>:<\/strong> Bu, modelin ONNX grafi\u011fini \u00e7\u0131karmak i\u00e7in kullan\u0131lan bir \u015fablondur. Modelin bekledi\u011fi <\/em>tam* giri\u015f boyutlar\u0131na ve veri tiplerine sahip olmal\u0131d\u0131r.<br \/>\n*   <strong><code>opset_version<\/code>:<\/strong> ONNX operat\u00f6r setinin versiyonunu belirtir. Genellikle en g\u00fcncel stabil versiyonu kullanmak iyi bir fikirdir, ancak hedef da\u011f\u0131t\u0131m ortam\u0131n\u0131z\u0131n destekledi\u011fi versiyonu kontrol etmeniz gerekebilir.<br \/>\n*   <strong><code>dynamic_axes<\/code>:<\/strong> \u00d6zellikle de\u011fi\u015fken boyutlu giri\u015flere (\u00f6rne\u011fin farkl\u0131 batch boyutlar\u0131) sahip modeller i\u00e7in kritik \u00f6neme sahiptir. Bu, ONNX Runtime&#8217;\u0131n farkl\u0131 giri\u015f boyutlar\u0131yla \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <strong><code>input_names<\/code> ve <code>output_names<\/code>:<\/strong> Bu isimler, ONNX modelini y\u00fcklerken giri\u015f ve \u00e7\u0131k\u0131\u015f tens\u00f6rlerini tan\u0131mlamak i\u00e7in kullan\u0131l\u0131r. A\u00e7\u0131klay\u0131c\u0131 isimler vermek kodu daha okunabilir hale getirir.<\/p>\n<h4>TensorFlow\/Keras Modellerini ONNX&#8217;e D\u00f6n\u00fc\u015ft\u00fcrme<\/h4>\n<p>TensorFlow veya Keras modellerini ONNX&#8217;e d\u00f6n\u00fc\u015ft\u00fcrmek i\u00e7in genellikle <code>tf2onnx<\/code> gibi \u00fc\u00e7\u00fcnc\u00fc taraf ara\u00e7lar kullan\u0131l\u0131r.<\/p>\n<pre><code class=\"language-bash\">\n<h2>Kurulum<\/h2>\npip install tf2onnx onnx\n\n<h2>\u00d6rnek d\u00f6n\u00fc\u015ft\u00fcrme komutu (bir saved_model i\u00e7in)<\/h2>\npython -m tf2onnx.convert --saved-model \/path\/to\/your\/saved_model --output model.onnx --opset 17\n\n<h2>Keras modelinden d\u00f6n\u00fc\u015ft\u00fcrme<\/h2>\n<h2>from tf2onnx import convert<\/h2>\n<h2>model = tf.keras.models.load_model('your_keras_model.h5')<\/h2>\n<h2>spec = (tf.TensorSpec((None, 224, 224, 3), tf.float32, name=\"input\"),)<\/h2>\n<h2>output_path = \"keras_model.onnx\"<\/h2>\n<h2>model_proto, _ = convert.from_keras(model, input_signature=spec, opset=17, output_path=output_path)<\/h2>\n<\/code><\/pre>\n<h4>scikit-learn Modellerini ONNX&#8217;e D\u00f6n\u00fc\u015ft\u00fcrme<\/h4>\n<p><code>skl2onnx<\/code> k\u00fct\u00fcphanesi, scikit-learn modellerini ONNX&#8217;e d\u00f6n\u00fc\u015ft\u00fcrmek i\u00e7in kullan\u0131l\u0131r.<\/p>\n<pre><code class=\"language-python\">\n<h2>Kurulum<\/h2>\n<h2>pip install skl2onnx onnx<\/h2>\n\n<h2>\u00d6rnek (Logistic Regression)<\/h2>\n<h2>from sklearn.linear_model import LogisticRegression<\/h2>\n<h2>from skl2onnx import convert_sklearn<\/h2>\n<h2>from skl2onnx.common.data_types import FloatTensorType<\/h2>\n<h2># # Model e\u011fitme<\/h2>\n<h2>model = LogisticRegression()<\/h2>\n<h2>X = [[0., 1.], [1., 1.], [2., 2.]]<\/h2>\n<h2>y = [0, 1, 0]<\/h2>\n<h2>model.fit(X, y)<\/h2>\n<h2># # ONNX'e d\u00f6n\u00fc\u015ft\u00fcrme<\/h2>\n<h2>initial_type = [('float_input', FloatTensorType([None, 2]))] # None: batch size<\/h2>\n<h2>onnx_model = convert_sklearn(model, initial_types=initial_type)<\/h2>\n<h2># with open(\"skl_model.onnx\", \"wb\") as f:<\/h2>\n<h2>f.write(onnx_model.SerializeToString())<\/h2>\n<\/code><\/pre>\n<h3>ONNX Runtime ile \u00c7\u0131kar\u0131m (Inference)<\/h3>\n<p>ONNX Runtime (ORT), ONNX format\u0131ndaki modelleri y\u00fcksek performansla \u00e7al\u0131\u015ft\u0131rmak i\u00e7in tasarlanm\u0131\u015f, \u00e7apraz platform bir \u00e7\u0131kar\u0131m motorudur. Farkl\u0131 donan\u0131m h\u0131zland\u0131r\u0131c\u0131lar\u0131n\u0131 (CPU, GPU, DSP vb.) destekler ve modeli otomatik olarak optimize ederek en iyi performans\u0131 sa\u011flamay\u0131 hedefler.<\/p>\n<h4>ONNX Runtime Kurulumu<\/h4>\n<pre><code class=\"language-bash\">\n<h2>CPU deste\u011fi i\u00e7in<\/h2>\npip install onnxruntime\n\n<h2>GPU (CUDA) deste\u011fi i\u00e7in<\/h2>\npip install onnxruntime-gpu\n<\/code><\/pre>\n<h4>ONNX Modeli ile \u00c7\u0131kar\u0131m Yapma<\/h4>\n<pre><code class=\"language-python\">\nimport onnxruntime as ort\nimport numpy as np\nimport torch # Sadece \u00f6rnek input olu\u015fturmak i\u00e7in\n\n<h2>Daha \u00f6nce kaydetti\u011fimiz ONNX modelini y\u00fckleyelim<\/h2>\nonnx_path = \"simple_model.onnx\"\n\n<h2>1. ONNX Runtime InferenceSession olu\u015ftural\u0131m<\/h2>\n<h2>providers parametresi ile hangi donan\u0131m sa\u011flay\u0131c\u0131lar\u0131n\u0131 kullanaca\u011f\u0131m\u0131z\u0131 belirleyebiliriz.<\/h2>\n<h2>Varsay\u0131lan olarak 'CPUExecutionProvider' kullan\u0131l\u0131r.<\/h2>\n<h2>E\u011fer GPU varsa: providers=['CUDAExecutionProvider', 'CPUExecutionProvider']<\/h2>\nsession = ort.InferenceSession(onnx_path, providers=['CPUExecutionProvider'])\n\n<h2>2. Modelin giri\u015f ve \u00e7\u0131k\u0131\u015f isimlerini ve bekledi\u011fi veri tiplerini alal\u0131m<\/h2>\ninput_name = session.get_inputs()[0].name\noutput_name = session.get_outputs()[0].name\ninput_shape = session.get_inputs()[0].shape\ninput_dtype = session.get_inputs()[0].type\n\nprint(f\"Model Giri\u015f Ad\u0131: {input_name}, \u015eekil: {input_shape}, Veri Tipi: {input_dtype}\")\nprint(f\"Model \u00c7\u0131k\u0131\u015f Ad\u0131: {output_name}\")\n\n<h2>3. Giri\u015f verisini haz\u0131rlayal\u0131m<\/h2>\n<h2>ONNX Runtime, numpy dizilerini bekler. PyTorch tens\u00f6r\u00fcn\u00fc numpy'ye d\u00f6n\u00fc\u015ft\u00fcrelim.<\/h2>\n<h2>Giri\u015f boyutu ve veri tipi modelin bekledi\u011fi gibi olmal\u0131.<\/h2>\n<h2>'float32' ONNX'teki 'tensor(float)' ile e\u015fle\u015fir.<\/h2>\ninput_data = torch.randn(1, 10).numpy().astype(np.float32)\n\n<h2>4. \u00c7\u0131kar\u0131m (Inference) yapal\u0131m<\/h2>\n<h2>session.run() metoduna \u00e7\u0131k\u0131\u015f isimleri listesi ve giri\u015fler s\u00f6zl\u00fc\u011f\u00fc verilir.<\/h2>\n<h2>Giri\u015f s\u00f6zl\u00fc\u011f\u00fc: {giri\u015f_ad\u0131: giri\u015f_verisi}<\/h2>\noutputs = session.run([output_name], {input_name: input_data})\n\n<h2>5. Sonu\u00e7lar\u0131 i\u015fleyelim<\/h2>\nresult = outputs[0]\nprint(f\"\u00c7\u0131kar\u0131m Sonucu (numpy array): {result}\")\nprint(f\"Sonu\u00e7 \u015eekli: {result.shape}, Veri Tipi: {result.dtype}\")\n\n<h2>E\u011fer birden fazla giri\u015f veya \u00e7\u0131k\u0131\u015f varsa, get_inputs()\/get_outputs() listesini<\/h2>\n<h2>ve session.run() parametrelerini buna g\u00f6re ayarlaman\u0131z gerekir.<\/h2>\n<\/code><\/pre>\n<h4>Pratik \u0130pu\u00e7lar\u0131:<\/h4>\n<p>*   <strong>Donan\u0131m Sa\u011flay\u0131c\u0131lar\u0131 (<code>providers<\/code>):<\/strong> <code>ort.InferenceSession<\/code> olu\u015ftururken <code>providers<\/code> arg\u00fcman\u0131n\u0131 kullanarak hangi donan\u0131m h\u0131zland\u0131r\u0131c\u0131lar\u0131n\u0131 kullanaca\u011f\u0131n\u0131z\u0131 belirtebilirsiniz. \u00d6rne\u011fin, CUDA GPU kullanmak i\u00e7in <code>['CUDAExecutionProvider', 'CPUExecutionProvider']<\/code> listesini vermelisiniz. ONNX Runtime listedeki ilk uygun sa\u011flay\u0131c\u0131y\u0131 kullanacakt\u0131r.<br \/>\n*   <strong>Oturum Se\u00e7enekleri (<code>SessionOptions<\/code>):<\/strong> <code>ort.SessionOptions()<\/code> ile \u00e7\u0131kar\u0131m oturumu \u00fczerinde daha fazla kontrol sa\u011flayabilirsiniz. \u00d6rne\u011fin, <code>graph_optimization_level<\/code> ile grafik optimizasyon seviyesini ayarlayabilir veya <code>intra_op_num_threads<\/code> ile CPU \u00e7ekirdek kullan\u0131m\u0131n\u0131 y\u00f6netebilirsiniz.<br \/>\n*   <strong>Giri\u015f Verisi:<\/strong> Giri\u015f verisinin NumPy dizisi olmas\u0131 ve modelin bekledi\u011fi \u015fekil (<code>shape<\/code>) ve veri tipine (<code>dtype<\/code>) tam olarak uymas\u0131 gerekti\u011fini unutmay\u0131n. Hatal\u0131 veri tipleri veya \u015fekiller <code>session.run()<\/code> s\u0131ras\u0131nda hataya yol a\u00e7acakt\u0131r.<br \/>\n*   <strong>Performans \u00d6l\u00e7\u00fcm\u00fc:<\/strong> Farkl\u0131 sa\u011flay\u0131c\u0131lar ve oturum se\u00e7enekleriyle modelinizin performans\u0131n\u0131 \u00f6l\u00e7erek en iyi konfig\u00fcrasyonu bulman\u0131z \u00f6nemlidir.<\/p>\n<h3>ONNX&#8217;in Geli\u015fmi\u015f Kullan\u0131m Alanlar\u0131 ve Optimizasyon<\/h3>\n<p>ONNX, sadece modelleri d\u00f6n\u00fc\u015ft\u00fcrmek ve \u00e7al\u0131\u015ft\u0131rmakla kalmaz, ayn\u0131 zamanda modelleri daha verimli hale getirmek i\u00e7in \u00e7e\u015fitli optimizasyon tekniklerine de olanak tan\u0131r.<\/p>\n<h4>Model Nicelikle\u015ftirme (Quantization)<\/h4>\n<p>Nicelikle\u015ftirme, modeldeki a\u011f\u0131rl\u0131klar\u0131n ve aktivasyonlar\u0131n hassasiyetini d\u00fc\u015f\u00fcrerek (\u00f6rne\u011fin, 32-bit float&#8217;tan 8-bit integer&#8217;a) model boyutunu k\u00fc\u00e7\u00fcltme ve \u00e7\u0131kar\u0131m h\u0131z\u0131n\u0131 art\u0131rma i\u015flemidir. \u00d6zellikle mobil ve edge cihazlarda da\u011f\u0131t\u0131m i\u00e7in kritik bir optimizasyondur. ONNX Runtime, bu i\u015flemi kolayla\u015ft\u0131ran ara\u00e7lar sunar.<\/p>\n<pre><code class=\"language-python\">\n<h2>Kurulum<\/h2>\n<h2>pip install onnxruntime onnxruntime-extensions<\/h2>\n\nfrom onnxruntime.quantization import quantize_dynamic, QuantFormat, onnx_model_utils\n\n<h2>Giri\u015f ONNX modelini dinamik nicelikle\u015ftirme ile optimize et<\/h2>\nmodel_path = \"simple_model.onnx\"\nquantized_model_path = \"simple_model_quantized.onnx\"\n\n<h2>Dinamik nicelikle\u015ftirme (a\u011f\u0131rl\u0131klar 8-bit int'e d\u00f6n\u00fc\u015ft\u00fcr\u00fcl\u00fcr, aktivasyonlar \u00e7al\u0131\u015fma zaman\u0131nda nicelikle\u015ftirilir)<\/h2>\nquantize_dynamic(\n    model_input=model_path,\n    model_output=quantized_model_path,\n    op_types_to_quantize=['MatMul', 'Gemm'], # Nicelikle\u015ftirilecek operat\u00f6r tipleri\n    per_channel=False, # Kanal ba\u015f\u0131na nicelikle\u015ftirme yap\u0131l\u0131p yap\u0131lmayaca\u011f\u0131\n    reduce_range=False, # Daha k\u00fc\u00e7\u00fck aral\u0131kta nicelikle\u015ftirme\n    format=QuantFormat.QDQ # QDQ format\u0131 (Quantize-Dequantize)\n)\n\nprint(f\"Nicelikle\u015ftirilmi\u015f model {quantized_model_path} konumuna kaydedildi.\")\n\n<h2>Nicelikle\u015ftirilmi\u015f modeli test etme<\/h2>\nsession_quantized = ort.InferenceSession(quantized_model_path, providers=['CPUExecutionProvider'])\ninput_data = torch.randn(1, 10).numpy().astype(np.float32)\noutputs_quantized = session_quantized.run([session_quantized.get_outputs()[0].name], \n                                          {session_quantized.get_inputs()[0].name: input_data})\nprint(f\"Nicelikle\u015ftirilmi\u015f Model \u00c7\u0131kar\u0131m Sonucu: {outputs_quantized[0]}\")\n<\/code><\/pre>\n<h4>Grafik Optimizasyonlar\u0131<\/h4>\n<p>ONNX Runtime, modelleri otomatik olarak optimize etmek i\u00e7in \u00e7e\u015fitli grafik optimizasyonlar\u0131 uygular. Bunlar aras\u0131nda d\u00fc\u011f\u00fcm birle\u015ftirme, \u00f6l\u00fc kod eliminasyonu ve katman f\u00fczyonu gibi teknikler bulunur. Bu optimizasyonlar, modelin hesaplama grafi\u011fini basitle\u015ftirerek ve gereksiz i\u015flemleri ortadan kald\u0131rarak performans\u0131 art\u0131r\u0131r.<\/p>\n<h4>ONNX GraphSurgeon<\/h4>\n<p>Daha karma\u015f\u0131k model manip\u00fclasyonlar\u0131 i\u00e7in ONNX GraphSurgeon gibi ara\u00e7lar kullan\u0131labilir. Bu, ONNX grafiklerini programatik olarak d\u00fczenlemenize, d\u00fc\u011f\u00fcmleri eklemenize, silmenize veya de\u011fi\u015ftirmenize olanak tan\u0131r. \u00d6zellikle \u00f6zel operat\u00f6rler eklemek veya mevcut operat\u00f6rleri belirli donan\u0131mlara g\u00f6re \u00f6zelle\u015ftirmek istedi\u011finizde faydal\u0131d\u0131r.<\/p>\n<h4>\u00d6zel Operat\u00f6rler (Custom Operators)<\/h4>\n<p>E\u011fer modeliniz standart ONNX operat\u00f6r setinde bulunmayan \u00f6zel bir katman veya i\u015flem i\u00e7eriyorsa, ONNX&#8217;e \u00f6zel operat\u00f6rler ekleyebilirsiniz. Bu, daha karma\u015f\u0131k veya ni\u015f modellerin ONNX ekosistemine entegrasyonunu sa\u011flar. Ancak, bu durum genellikle daha fazla geli\u015ftirme \u00e7abas\u0131 gerektirir ve da\u011f\u0131t\u0131m ortam\u0131n\u0131z\u0131n bu \u00f6zel operat\u00f6rleri desteklemesini sa\u011flaman\u0131z gerekir.<\/p>\n<h4>Pratik \u0130pu\u00e7lar\u0131:<\/h4>\n<p>*   <strong>Dengeyi Bulmak:<\/strong> Optimizasyonlar genellikle do\u011fruluktan (accuracy) \u00f6d\u00fcn vermeyi gerektirebilir. Nicelikle\u015ftirme gibi teknikleri uygulad\u0131ktan sonra modelinizin performans\u0131n\u0131 ve do\u011frulu\u011funu dikkatlice test etmelisiniz.<br \/>\n*   <strong>Profil Olu\u015fturma:<\/strong> Optimizasyon \u00f6ncesi ve sonras\u0131 modelinizin \u00e7\u0131kar\u0131m s\u00fcresini ve bellek kullan\u0131m\u0131n\u0131 profilleyerek, yap\u0131lan de\u011fi\u015fikliklerin ger\u00e7ek faydalar\u0131n\u0131 \u00f6l\u00e7\u00fcn.<br \/>\n*   <strong>\u0130teratif Yakla\u015f\u0131m:<\/strong> Optimizasyon s\u00fcreci genellikle iteratiftir. K\u00fc\u00e7\u00fck ad\u0131mlarla ba\u015flay\u0131n, test edin ve gerekti\u011finde ayarlamalar yap\u0131n.<\/p>\n<h3>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<p>ONNX, makine \u00f6\u011frenimi modellerinin geli\u015ftirilmesinden da\u011f\u0131t\u0131m\u0131na kadar t\u00fcm ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fc basitle\u015ftiren g\u00fc\u00e7l\u00fc ve a\u00e7\u0131k bir standartt\u0131r. Framework ba\u011f\u0131ms\u0131zl\u0131\u011f\u0131, y\u00fcksek performansl\u0131 \u00e7\u0131kar\u0131m yetenekleri ve model optimizasyon ara\u00e7lar\u0131yla, her ML\/AI geli\u015ftiricisinin ara\u00e7 setinde bulunmas\u0131 gereken \u00f6nemli bir bile\u015fendir. ONNX&#8217;i anlamak ve kullanmak, modellerinizi daha verimli, ta\u015f\u0131nabilir ve \u00e7e\u015fitli ortamlara kolayca da\u011f\u0131t\u0131labilir hale getirecektir.<\/p>\n<h4>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h4>\n<dl>\n<dt><strong>ONNX hangi makine \u00f6\u011frenimi framework&#8217;lerini destekler?<\/strong><\/dt>\n<dd>ONNX; PyTorch, TensorFlow, Keras, scikit-learn, XGBoost, LightGBM ve daha bir\u00e7ok pop\u00fcler framework&#8217;\u00fc destekler. Desteklenen framework&#8217;lerden modelleri ONNX format\u0131na d\u00f6n\u00fc\u015ft\u00fcrmek i\u00e7in ilgili k\u00fct\u00fcphaneler (\u00f6rn. <code>tf2onnx<\/code>, <code>skl2onnx<\/code>) kullan\u0131l\u0131r.<\/dd>\n<dt><strong>ONNX Runtime neden genellikle orijinal framework&#8217;\u00fcn \u00e7\u0131kar\u0131m motorundan daha h\u0131zl\u0131d\u0131r?<\/strong><\/dt>\n<dd>ONNX Runtime (ORT), C++ ile yaz\u0131lm\u0131\u015f, y\u00fcksek performansl\u0131 bir \u00e7\u0131kar\u0131m motorudur. Donan\u0131ma \u00f6zel optimizasyonlar (\u00f6rn. NVIDIA CUDA, Intel OpenVINO), geli\u015fmi\u015f grafik optimizasyonlar\u0131 ve verimli bellek y\u00f6netimi sayesinde, genellikle orijinal framework&#8217;lerin Python tabanl\u0131 \u00e7\u0131kar\u0131m s\u00fcre\u00e7lerinden daha h\u0131zl\u0131 \u00e7al\u0131\u015f\u0131r.<\/dd>\n<dt><strong>ONNX modelimi nas\u0131l g\u00f6rselle\u015ftirebilirim?<\/strong><\/dt>\n<dd>Netron, ONNX modellerini g\u00f6rselle\u015ftirmek i\u00e7in pop\u00fcler ve \u00fccretsiz bir ara\u00e7t\u0131r. Modelin hesaplama grafi\u011fini, operat\u00f6rlerini, giri\u015f\/\u00e7\u0131k\u0131\u015f tens\u00f6rlerini ve a\u011f\u0131rl\u0131klar\u0131n\u0131 detayl\u0131 bir \u015fekilde g\u00f6rmenizi sa\u011flar.<\/dd>\n<dt><strong>Her makine \u00f6\u011frenimi modeli ONNX&#8217;e d\u00f6n\u00fc\u015ft\u00fcr\u00fclebilir mi?<\/strong><\/dt>\n<dd>\u00c7o\u011fu standart derin \u00f6\u011frenme ve geleneksel makine \u00f6\u011frenimi modeli ONNX&#8217;e ba\u015far\u0131yla d\u00f6n\u00fc\u015ft\u00fcr\u00fclebilir. Ancak, \u00e7ok \u00f6zel veya deneysel operat\u00f6rler i\u00e7eren modeller i\u00e7in d\u00f6n\u00fc\u015ft\u00fcrme i\u015flemi ek \u00e7aba gerektirebilir veya \u00f6zel operat\u00f6rlerin ONNX&#8217;e manuel olarak eklenmesini gerektirebilir.<\/dd>\n<dt><strong>ONNX ile ilgili daha fazla kaynak nerede bulabilirim?<\/strong><\/dt>\n<dd>\n<ul>\n<li>Resmi ONNX GitHub deposu: <a href=\"https:\/\/github.com\/onnx\/onnx\" target=\"_blank\">github.com\/onnx\/onnx<\/a><\/li>\n<li>ONNX Runtime belgeleri: <a href=\"https:\/\/onnxruntime.ai\/\" target=\"_blank\">onnxruntime.ai<\/a><\/li>\n<li>Netron: <a href=\"https:\/\/netron.app\/\" target=\"_blank\">netron.app<\/a><\/li>\n<li>\u0130lgili framework&#8217;lerin (PyTorch, TensorFlow) ONNX export belgeleri.<\/li>\n<\/ul>\n<\/dd>\n<\/dl>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Her ML\/AI Geli\u015ftiricisinin ONNX Hakk\u0131nda Bilmesi Gerekenler\nMakine \u00f6\u011frenimi ve yapay zeka modelleri geli\u015ftirmek heyecan verici bir s\u00fcre\u00e7tir,","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1342],"tags":[],"class_list":{"0":"post-30511","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-ai","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Her ML\/AI Geli\u015ftiricisinin ONNX Hakk\u0131nda Bilmesi Gerekenler - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/her-ml-ai-gelistiricisinin-onnx-hakkinda-bilmesi-gerekenler\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Her ML\/AI Geli\u015ftiricisinin ONNX Hakk\u0131nda Bilmesi Gerekenler\" \/>\n<meta property=\"og:description\" content=\"Her ML\/AI Geli\u015ftiricisinin ONNX Hakk\u0131nda Bilmesi Gerekenler Makine \u00f6\u011frenimi ve yapay zeka modelleri geli\u015ftirmek heyecan verici bir s\u00fcre\u00e7tir,\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/her-ml-ai-gelistiricisinin-onnx-hakkinda-bilmesi-gerekenler\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-09-28T15:42:17+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/her-ml-ai-gelistiricisinin-onnx-hakkinda-bilmesi-gerekenler\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/her-ml-ai-gelistiricisinin-onnx-hakkinda-bilmesi-gerekenler\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Her ML\/AI Geli\u015ftiricisinin ONNX Hakk\u0131nda Bilmesi Gerekenler\",\"datePublished\":\"2025-09-28T15:42:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/her-ml-ai-gelistiricisinin-onnx-hakkinda-bilmesi-gerekenler\/\"},\"wordCount\":1567,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"AI\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/her-ml-ai-gelistiricisinin-onnx-hakkinda-bilmesi-gerekenler\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/her-ml-ai-gelistiricisinin-onnx-hakkinda-bilmesi-gerekenler\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/her-ml-ai-gelistiricisinin-onnx-hakkinda-bilmesi-gerekenler\/\",\"name\":\"Her ML\/AI Geli\u015ftiricisinin ONNX Hakk\u0131nda Bilmesi Gerekenler - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-09-28T15:42:17+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/her-ml-ai-gelistiricisinin-onnx-hakkinda-bilmesi-gerekenler\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/her-ml-ai-gelistiricisinin-onnx-hakkinda-bilmesi-gerekenler\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/her-ml-ai-gelistiricisinin-onnx-hakkinda-bilmesi-gerekenler\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Her ML\/AI Geli\u015ftiricisinin ONNX Hakk\u0131nda Bilmesi Gerekenler\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Her ML\/AI Geli\u015ftiricisinin ONNX Hakk\u0131nda Bilmesi Gerekenler - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/her-ml-ai-gelistiricisinin-onnx-hakkinda-bilmesi-gerekenler\/","og_locale":"tr_TR","og_type":"article","og_title":"Her ML\/AI Geli\u015ftiricisinin ONNX Hakk\u0131nda Bilmesi Gerekenler","og_description":"Her ML\/AI Geli\u015ftiricisinin ONNX Hakk\u0131nda Bilmesi Gerekenler Makine \u00f6\u011frenimi ve yapay zeka modelleri geli\u015ftirmek heyecan verici bir s\u00fcre\u00e7tir,","og_url":"https:\/\/fatihsoysal.com\/blog\/her-ml-ai-gelistiricisinin-onnx-hakkinda-bilmesi-gerekenler\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-09-28T15:42:17+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"12 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/her-ml-ai-gelistiricisinin-onnx-hakkinda-bilmesi-gerekenler\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/her-ml-ai-gelistiricisinin-onnx-hakkinda-bilmesi-gerekenler\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Her ML\/AI Geli\u015ftiricisinin ONNX Hakk\u0131nda Bilmesi Gerekenler","datePublished":"2025-09-28T15:42:17+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/her-ml-ai-gelistiricisinin-onnx-hakkinda-bilmesi-gerekenler\/"},"wordCount":1567,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["AI"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/her-ml-ai-gelistiricisinin-onnx-hakkinda-bilmesi-gerekenler\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/her-ml-ai-gelistiricisinin-onnx-hakkinda-bilmesi-gerekenler\/","url":"https:\/\/fatihsoysal.com\/blog\/her-ml-ai-gelistiricisinin-onnx-hakkinda-bilmesi-gerekenler\/","name":"Her ML\/AI Geli\u015ftiricisinin ONNX Hakk\u0131nda Bilmesi Gerekenler - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-09-28T15:42:17+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/her-ml-ai-gelistiricisinin-onnx-hakkinda-bilmesi-gerekenler\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/her-ml-ai-gelistiricisinin-onnx-hakkinda-bilmesi-gerekenler\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/her-ml-ai-gelistiricisinin-onnx-hakkinda-bilmesi-gerekenler\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Her ML\/AI Geli\u015ftiricisinin ONNX Hakk\u0131nda Bilmesi Gerekenler"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/30511","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=30511"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/30511\/revisions"}],"predecessor-version":[{"id":30512,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/30511\/revisions\/30512"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=30511"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=30511"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=30511"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}