在keras

时间:2017-05-30 22:53:55

标签: tensorflow deep-learning keras theano tensorflow-gpu

我试图在keras中提取特征(使用tensorflow以及theano背景)。但变得不成功。

我的代码是:

model = Sequential()

model.add(Convolution2D(64, 5, 5, input_shape=(3,img_width, img_height)))
model.add(LeakyReLU(alpha=.01))
model.add(MaxPooling2D(pool_size=(2, 2)))


model.add(Convolution2D(64, 2, 2))
model.add(LeakyReLU(alpha=.01))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.1))

model.add(Flatten())
model.add(Dense(128))
model.add(Activation('relu'))

model.add(Dense(8))

model.add(ActivityRegularization(l2=0.01))
model.add(Activation('relu'))
model.add(Dropout(0.25))

 model.add(Dense(1))
model.add(Activation('sigmoid'))
test_datagen = ImageDataGenerator(rescale=1./255)


test_generator = test_datagen.flow_from_directory(
    test_data_dir,
    target_size=(img_width, img_height),
    batch_size=16,
    class_mode='binary')



scores = model.evaluate_generator(test_generator, 237)
print("Accuracy = ", scores[1])

我已经将fit_generator用于训练,验证和测试用例。

我从第3层获取输出的代码是:

get_activations = theano.function([model.layers[0].input], 
model.layers[3].output(train=False), allow_input_downcast=True)

activations = get_activations(test_generator)

但在排除它之后我收到了一个错误:

 File "test.py", line 96, in <module>
 get_activations = theano.function([model.layers[0].input], 
 model.layers[3].output(train=False), allow_input_downcast=True)
 TypeError: 'TensorVariable' object is not callable

如何在theano或tensorflow模式(其中任何一个或两者)中执行此操作。我在我的代码中使用了fit_generator进行图像增强。

请帮忙。

1 个答案:

答案 0 :(得分:1)

首先,我建议您切换到Keras-2.x以获得更好的体验。 Keras-2.x更有条理。

其次,建议不要使用theano.function之类的代码,而应使用keras.backend.function代替。

引发错误是因为model.layers[3].output是张量,你不能像model.layers[3].output(train=False)那样调用张量。

我提取功能的代码通常如下:

model = Sequential()
model.add(Convolution2D(64, 5, 5, input_shape=(3,img_width, img_height)))
model.add(Convolution2D(64, 2, 2))

# blablabla...

model.add(Dense(8, name='feature'))

model.add(Dropout(0.25))
model.add(Dense(1))
model.add(Activation('sigmoid'))

feature_network = Model(model.input, model.get_layer('feature').output)
feature = feature_network.predict(your_data_here)

我使用feature命名目标要素图层,并使用get_layer函数检索该图层。