Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow 多输入单输出张量流模型_Tensorflow_Python_Machine Learning_Keras_Deep Learning - Fatal编程技术网

Tensorflow 多输入单输出张量流模型

Tensorflow 多输入单输出张量流模型,tensorflow,python,machine-learning,keras,deep-learning,Tensorflow,Python,Machine Learning,Keras,Deep Learning,我是新手。尝试开发具有多个输入和单个输出的简单模型。如果有人能帮我,我将不胜感激。我发现下面的代码可能可以工作,但它不能。另外,在这种情况下,如何传递predict参数 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 =

我是新手。尝试开发具有多个输入和单个输出的简单模型。如果有人能帮我,我将不胜感激。我发现下面的代码可能可以工作,但它不能。另外,在这种情况下,如何传递predict参数

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

首先,
精度
度量对于回归任务意义不大,而更适合于分类问题。相反,对于回归,可以使用or分数。仅供参考,从以下链接可以找到or的实施


让我们建立一个模型,对两个整数输入进行简单求和。为此,我们首先创建一个虚拟数据集

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)
推理

模型需要两个输入,其形状为
(无,1)
(无,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)

您在使用此代码时遇到的错误是什么?谢谢您!事实上,我在模型中看到了零精度。两个输入和输出之间的关系就是两个输入的和。所以模型应该能够达到100%的准确度。当我使用model.predict([5,5])时也是如此。它抛出错误“ValueError:层模型需要2个输入,但它收到1个输入张量。收到的输入:[]”非常感谢您的时间。实际上,我在这一行得到了错误(数组([-1,0,1,2,3.]),数组([-2,0,2,4,6.])。错误是TypeError:array()参数1必须是unicode字符,而不是列表。实际上,我删除了那行代码并执行了您的代码。它仍然运行良好,但模型无法正确预测。对于这个打印(模型([np.expand_-dims(np.array(18),0),np.expand_-dims(np.array(6),0)]).numpy()),我得到了[[33.084637]]。这在这一点上是正常的,它只是指过拟合的东西。为了使建模策略更加强大,我们可能需要使用验证数据集或使用各种技术来防止这种情况。这实际上超出了你当前问题的范围。仅供参考,如果您不知道模型过盈、过盈等情况,请对其进行搜索。非常感谢您抽出时间来参观。我从你那里学到了很多。在你的帮助下,我能够做我想做的事。再次非常感谢你!!!很乐意帮忙。:)
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)