【发布时间】:2020-01-21 13:57:08
【问题描述】:
我正在尝试在 Keras 中实现一个 conv-net,我计划将层分成不同参数激活函数的单元,然后使用连接层重新组合这些单元。但是,在测试层的分离/重组期间,我在网络的第一层遇到了上述错误。
使用的代码:
#Import statements.
import random
import numpy as np
from tensorflow import keras
import tensorflow as tf
from tensorflow.keras import layers as L
from collections import deque
#Op function.
def op(x, units, kernel, stride, activation):
x_list = []
for i in range(units):
x_list += L.Conv2D(1, kernel, stride, activation=activation)(x)
x = L.Concatenate(-1)(x_list)
return x
#build_model method
def build_model(self):
inputx = L.Input(shape=self.state_size)
goalx = L.Input(shape=self.state_size)
x = L.Concatenate(1)([goalx, inputx])
x = op(x, 4, (5,5), (1,1), activation=swish)
x = op(x, 4, (5,5), (1,1), activation=swish)
x = op(x, 16, (5,5), (2,2), activation=swish)
x = op(x, 16, (5,5), (2,2), activation=swish)
x = op(x, 16, (5,5), (1,1), activation=swish)
x = op(x, 16, (5,5), (1,1), activation=swish)
x = op(x, 16, (5,5), (1,1), activation=swish)
x = op(x, 16, (5,5), (1,1), activation=swish)
x = op(x, 16, (5,5), (1,1), activation=swish)
x = op(x, 16, (5,5), (1,1), activation=swish)
x = L.Flatten()(x)
outp = L.Dense(self.action_size, activation='softmax')(x)
valp = L.Dense(1)(x)
model = keras.models.Model([inputx, goalx], outp)
critic = keras.models.Model([inputx, goalx], valp)
model.compile(loss='msle', optimizer='adam')
critic.compile(loss='msle', optimizer='adam')
return model, critic
追溯:
Traceback (most recent call last):
File "thoughtform.py", line 76, in <module>
main_loop()
File "thoughtform.py", line 50, in main_loop
dqn = DQN(frame.shape, 5000)
File "/home/ai/Projects/Thoughtforms/dqn.py", line 27, in __init__
self.model, self.critic = self.build_model()
File "/home/ai/Projects/Thoughtforms/dqn.py", line 33, in build_model
x = op(x, 4, (5,5), (1,1), activation=swish)
File "/home/ai/Projects/Thoughtforms/dqn.py", line 16, in op
x = L.Concatenate(-1)(x)
File "/home/ai/anaconda3/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/base_layer.py", line 817, in __call__
self._maybe_build(inputs)
File "/home/ai/anaconda3/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/base_layer.py", line 2141, in _maybe_build
self.build(input_shapes)
File "/home/ai/anaconda3/lib/python3.7/site-packages/tensorflow_core/python/keras/utils/tf_utils.py", line 306, in wrapper
output_shape = fn(instance, input_shape)
File "/home/ai/anaconda3/lib/python3.7/site-packages/tensorflow_core/python/keras/layers/merge.py", line 378, in build
raise ValueError('A `Concatenate` layer should be called '
ValueError: A `Concatenate` layer should be called on a list of at least 2 inputs
【问题讨论】:
-
你的意思是
L.Concatenate(-1)(x_list)? -
@Jakub,啊,是的。不过,仍然会收到完全相同的错误消息。
-
您使用了多少个
units?如果它是 1,你会得到那个错误。 -
@Jakub,前两个“层”各有 4 个,接下来的 6 个“层”有 16 个...
-
你能包括你如何称呼
op吗?
标签: python python-3.x tensorflow keras