我试图用for循环分隔keras
Conv2D
图层的每个输出,然后通过Functional API
向它添加另一图层,但出现类型错误。该代码是:Keras:功能API - 图层数据类型错误
import keras
from keras.models import Sequential, Model
from keras.layers import Flatten, Dense, Dropout, Input, Activation
from keras.layers.convolutional import Conv2D, MaxPooling2D, ZeroPadding2D
from keras.layers.merge import Add
from keras.optimizers import SGD
import cv2, numpy as np
import glob
import csv
def conv_layer:
input = Input(shape=(3,224,224))
k = 64
x = np.empty(k, dtype=object)
y = np.empty(k, dtype=object)
z = np.empty(k, dtype=object)
for i in range(0,k):
x[i] = Conv2D(1, (3,3), data_format='channels_first', padding='same')(input)
y[i] = Conv2D(1, (3,3), data_format='channels_first', padding='same')(x[i])
z[i] = keras.layers.add([x[i], y[i]])
out = Activation('relu')(z)
model = Model(inputs, out, name='split-layer-model')
return model
但是,它抛出以下错误:
Traceback (most recent call last):
File "vgg16-local-connections.py", line 352, in <module>
model = VGG_16_local_connections()
File "vgg16-local-connections.py", line 40, in VGG_16_local_connections
out = Activation('relu')(z)
File "/Users/klab/anaconda2/lib/python2.7/site-packages/keras/engine/topology.py", line 519, in __call__
input_shapes.append(K.int_shape(x_elem))
File "/Users/klab/anaconda2/lib/python2.7/site-packages/keras/backend/tensorflow_backend.py", line 409, in int_shape
shape = x.get_shape()
AttributeError: 'numpy.ndarray' object has no attribute 'get_shape'
所以,z
数据类型不匹配Functional API
之一。我怎样才能解决这个问题?任何帮助将深表感谢!
实际上,我希望整个堆栈有一个ReLU激活,我想只调用'z'就足够了。我后来意识到我的错误,并在行out = Activation('relu')()之前添加了'z = keras.layers.concatenate([z [i] for i in range(0,k)],axis = 1)'( z)',它运作完美。 – Prabaha