मैं में नया हूं। एकाधिक इनपुट और एकल आउटपुट के साथ एक सरल मॉडल विकसित करने का प्रयास करना। मैं इसकी सराहना करूंगा अगर कोई इसमें मेरी मदद कर सकता है। मुझे निम्न कोड मिला जो काम कर सकता है लेकिन ऐसा नहीं है। साथ ही, मैं इस मामले में भविष्यवाणी पैरामीटर कैसे पास करूं?

trainx1 = np.array([-1, 0, 1, 2, 3, 4], dtype=float)
trainx2 = np.array([-1, 0, 1, 2, 3, 4], dtype=float)
labely1 = np.array([-2, 0, 2, 4, 6, 8], dtype=float)

x1 = Input(shape =(1,))
x2 = Input(shape =(1,))
input_layer = concatenate([x1,x2])
hidden_layer = Dense(units=4, activation='relu')(input_layer)
prediction = Dense(1, activation='linear')(hidden_layer)

model = Model(inputs=[x1, x2], outputs=prediction)
model.compile(loss="mean_squared_error", 
              optimizer="adam", metrics=['accuracy'])

model.fit([trainx1, trainx2], labely1, 
          epochs=100, batch_size=1, verbose=2, shuffle=False)
model.summary()
1
Tom 2 जून 2021, 18:38
आप इस कोड के साथ क्या त्रुटि का सामना कर रहे हैं?
 – 
M.Innat
2 जून 2021, 18:58
धन्यवाद इनाट! असल में मुझे मॉडल में शून्य सटीकता दिखाई देती है। दो इनपुट और आउटपुट के बीच संबंध केवल दो इनपुट का योग है। तो मॉडल 100% सटीकता प्राप्त करने में सक्षम होना चाहिए। इसके अलावा जब मैं model.predict([5,5]) का उपयोग करता हूं। यह त्रुटि फेंकता है "ValueError: परत मॉडल 2 इनपुट की अपेक्षा करता है, लेकिन इसे 1 इनपुट टेंसर प्राप्त हुआ। इनपुट प्राप्त हुए: [] "
 – 
Tom
2 जून 2021, 19:24

1 उत्तर

सबसे बढ़िया उत्तर

सबसे पहले, accuracy मेट्रिक्स प्रतिगमन कार्य के लिए कम समझ में आता है और वर्गीकरण समस्या के लिए अधिक उपयुक्त है। इसके बजाय, प्रतिगमन के लिए mae, या r2< /a> स्कोर का उपयोग किया जा सकता है। FYI करें, निम्न लिंक से आप पा सकते हैं r2 स्कोर या tfa.metrics.RSquare


आइए एक मॉडल बनाएं जो दो पूर्णांक इनपुट का एक सरल योग करेगा। उसके लिए, आइए पहले एक डमी डेटा सेट बनाएं।

import numpy as np 
import tensorflow as tf 

inp1 = np.array([i-1 for i in range(3000)], dtype=float)
inp2 = np.array([i-1 for i in range(3000)], dtype=float)
tar = np.array([(input[0] + input [1]) \
                for input in zip(inp1, inp2)], dtype=float)

inp1.shape, tar.shape 
((3000,), (3000,))

inp1[:5], tar[:5]
(array([-1.,  0.,  1.,  2.,  3.]), array([-2.,  0.,  2.,  4.,  6.]))

मॉडल

import tensorflow as tf 
from tensorflow.keras import Input  
from tensorflow.keras import Model 
from tensorflow.keras.layers import *

x1 = Input(shape =(1,))
x2 = Input(shape =(1,))

input_layer = concatenate([x1,x2])
hidden_layer = Dense(units=4, activation='relu')(input_layer)

prediction = Dense(1, activation='linear')(hidden_layer)
model = Model(inputs=[x1, x2], outputs=prediction)

संकलित करें और चलाएं

model.compile(loss="mean_squared_error", 
              optimizer='adam', 
              metrics=['mae'])
model.fit([inp1, inp2], tar, epochs=300, 
          batch_size=32, verbose=2)
Epoch 1/300
94/94 - 0s - loss: 10816206.0000 - mae: 2846.8416
Epoch 2/300
94/94 - 0s - loss: 7110172.5000 - mae: 2301.0493
Epoch 3/300
94/94 - 0s - loss: 3619359.5000 - mae: 1633.6898
....
....
Epoch 298/300
94/94 - 0s - loss: 9.3060e-07 - mae: 7.4665e-04
Epoch 299/300
94/94 - 0s - loss: 9.3867e-07 - mae: 7.5240e-04
Epoch 300/300
94/94 - 0s - loss: 7.2407e-07 - mae: 6.6270e-04

अनुमान

मॉडल (None, 1) और (None, 1) के आकार के साथ दो इनपुट की अपेक्षा करता है। इसलिए हम प्रत्येक इनपुट के साथ निम्नानुसार एक बैच आयाम (expand_dims) का विस्तार करते हैं।

model([np.expand_dims(np.array(4), 0), 
       np.expand_dims(np.array(4), 0)]).numpy()
array([[7.998661]], dtype=float32)

model([np.expand_dims(np.array(10), 0), 
       np.expand_dims(np.array(10), 0)]).numpy()
array([[19.998667]], dtype=float32)

model([np.expand_dims(np.array(50), 0), 
       np.expand_dims(np.array(40), 0)]).numpy()
array([[88.77226]], dtype=float32)
1
M.Innat 2 जून 2021, 21:17
आपके समय के लिए बहुत बहुत शुक्रिया। असल में मुझे इस लाइन पर त्रुटि मिलती है (सरणी ([-1।, 0., 1., 2., 3.]), सरणी ([-2।, 0., 2., 4., 6.])) . त्रुटि है TypeError: array() तर्क 1 एक यूनिकोड वर्ण होना चाहिए, सूची नहीं।
 – 
Tom
2 जून 2021, 22:07
असल में मैंने कोड की उस पंक्ति को हटा दिया और आपका कोड निष्पादित किया। यह अभी भी ठीक काम करता है लेकिन मॉडल सही ढंग से भविष्यवाणी नहीं करता है। इस प्रिंट के लिए(मॉडल([np.expand_dims(np.array(18), 0)), np.expand_dims(np.array(6), 0)]).numpy()), मुझे [[33.084637]] मिलता है।
 – 
Tom
2 जून 2021, 22:19
इस बिंदु पर यह सामान्य है, और यह केवल सामान को ओवरफिट करने के लिए संदर्भित करता है। मॉडलिंग रणनीतियों को और अधिक मजबूत बनाने के लिए, हमें इसे रोकने के लिए सत्यापन डेटा सेट या विभिन्न तकनीकों का उपयोग करने की आवश्यकता हो सकती है। यह वास्तव में आपके वर्तमान प्रश्न के दायरे से बाहर है। FYI करें, यदि आप मॉडल ओवरफिटिंग, अंडरफिटिंग आदि के बारे में नहीं जानते हैं, तो कृपया उन पर कुछ खोज करें।
 – 
M.Innat
2 जून 2021, 22:40
1
मैं वास्तव में आपके समय की सराहना करता हूं Innat। मैंने आपसे बहुत कुछ सीखा है। आपकी मदद से मैं वह कर पा रहा हूं जो मेरा इरादा था। फिर से, बहुत बहुत धन्यवाद!!!
 – 
Tom
3 जून 2021, 16:23
मदद करने में खुशी। :)
 – 
M.Innat
3 जून 2021, 16:33