簡體   English   中英

TensorFlow model 多輸入單 output

[英]TensorFlow model with multiple inputs and single output

我是的新手。 嘗試開發具有多個輸入和單個 output 的簡單 model。 如果有人可以幫助我,我將不勝感激。 我發現以下代碼可能有效,但無效。 另外,在這種情況下如何傳遞預測參數?

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

首先, accuracy指標對回歸任務意義不大,更適合分類問題。 相反,可以使用回歸maer2分數。 僅供參考,從以下鏈接中,您可以找到r2分數tfa.metrics.RSquare實現。


讓我們構建一個 model,它將對兩個 integer 輸入進行簡單求和。 為此,讓我們首先創建一個虛擬數據集。

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.]))

Model

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

推理

model 需要兩個形狀為(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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM