【问题标题】:Keras neural network multiple outputKeras 神经网络多输出
【发布时间】:2021-09-22 14:16:36
【问题描述】:

我想创建一个具有多个输出的神经网络。有了一个结论,我成功地做到了这一点,但有两个 - 它不起作用。你能帮我吗?您知道任何带有 keras 示例的资源吗?我附上下面的代码和错误。 (对不起,我的英文是谷歌翻译的)

代码:

from keras.models import Sequential
from keras.layers import Dense
x = [[1, 1, 1, 1], [0, 1, 1, 0], [1, 0, 0, 1], [0, 0, 0, 0], [1, 1, 0, 0], [0, 1, 1, 1], [1, 1, 1, 0], [1, 0, 0, 0]]
y = [[1, 1], [0, 0], [0, 0], [0, 0], [1, 0], [0, 1], [1, 0], [0, 0]]
model = Sequential()
# model.add(Dense(3, activation='sigmoid'))
model.add(Dense(2, activation='sigmoid'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer=keras.optimizers.Adam(1e-1), metrics=['accuracy'])
model.fit(x, y, epochs=20)
model.predict(x=[[0, 0, 1, 1]])

错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-77-c805cf1cd17e> in <module>()
      3 x = [[1, 1, 1, 1], [0, 1, 1, 0], [1, 0, 0, 1], [0, 0, 0, 0], [1, 1, 0, 0], [0, 1, 1, 1], [1, 1, 1, 0], [1, 0, 0, 0]]
      4 y = [[1, 1], [0, 0], [0, 0], [0, 0], [1, 0], [0, 1], [1, 0], [0, 0]]
----> 5 model = Sequential(input=x, output=y)
      6 # model.add(Dense(3, activation='sigmoid'))
      7 model.add(Dense(2, activation='sigmoid'))

/usr/local/lib/python3.7/dist-packages/tensorflow/python/training/tracking/base.py in _method_wrapper(self, *args, **kwargs)
    520     self._self_setattr_tracking = False  # pylint: disable=protected-access
    521     try:
--> 522       result = method(self, *args, **kwargs)
    523     finally:
    524       self._self_setattr_tracking = previous_value  # pylint: disable=protected-access

TypeError: __init__() got an unexpected keyword argument 'input'

UPD。 我按照 cmets 中的建议重新编写了代码,但现在,每次训练时,它都会输出某种不在 0 - 1 范围内的随机结果。

from keras.models import Model
from keras.layers import Input
from keras.layers import Dense

x = [[0, 0], [0, 1], [1, 0], [1, 1]]
y = [[1, 1], [1, 0], [0, 1], [0, 0]]

visible = Input(shape=(2,))
hidden = Dense(2)(visible)

# hidden2 = Dense(2)(visible)
model = Model(inputs=visible, outputs=[hidden])
model.compile(loss='binary_crossentropy', metrics=['accuracy'])
model.fit(x, y, epochs=8)
model.predict(x=[[1, 0]])

【问题讨论】:

  • ValueError:传递给模型的输入列表是多余的。所有输入应该只出现一次。找到:[1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1 , 1, 1, 1, 0, 1, 0, 0, 0]
  • Mode(...) 是 Model(...)?
  • 什么是 [out1, out2]? [[out1fortest1, out2fortest1], [out1fortest2, out2fortest2]]?
  • 你能给我举个例子吗?
  • Keras 文档对此进行了介绍,请参阅keras.io/guides/functional_api/… 如果文档可以回答,则无需在这里提问。

标签: python python-3.x tensorflow keras neural-network


【解决方案1】:

首先,顺序模型不支持多输出。如果你的意思是多输出,多神经元,那么你可以使用顺序模型,应该只是改变最后一层神经元的数量。

这是你的第一个模型代码的修改:

from keras.models import Sequential
from keras.layers import Dense
x = [[1, 1, 1, 1], [0, 1, 1, 0], [1, 0, 0, 1], [0, 0, 0, 0], [1, 1, 0, 0], [0, 1, 1, 1], [1, 1, 1, 0], [1, 0, 0, 0]]
y = [[1, 1], [0, 0], [0, 0], [0, 0], [1, 0], [0, 1], [1, 0], [0, 0]]
model = Sequential()
# model.add(Dense(3, activation='sigmoid'))
model.add(Dense(2, activation='sigmoid'))
model.add(Dense(2, activation='sigmoid')) #change neurons to 2
model.compile(loss='binary_crossentropy', optimizer=keras.optimizers.Adam(1e-1), metrics=['accuracy'])
model.fit(x, y, epochs=20)
model.predict(x=[[0, 0, 1, 1]])

但是如果你想要一个函数式 api 的例子,这里是:

from keras.models import Model
from keras.layers import Input
from keras.layers import Dense
import keras
x = [[0, 0], [0, 1], [1, 0], [1, 1]]
y = [[1, 1], [1, 0], [0, 1], [0, 0]]

visible = Input(shape=(2,))
hidden = Dense(64, activation='relu')(visible)
hidden = Dense(64, activation='relu')(hidden)
hidden = Dense(64, activation='relu')(hidden)
hidden = Dense(2, activation='sigmoid')(hidden) #use sigmoid activation for output between 0 and 1


model = Model(inputs=visible, outputs=hidden)
model.compile(optimizer='adam', loss='binary_crossentropy')
model.fit(x, y, epochs=100)
model.predict(x=[[1, 0]])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-16
    • 2018-01-24
    • 2021-03-04
    • 2021-01-07
    • 2015-02-23
    • 2017-03-16
    相关资源
    最近更新 更多