I have this function to generate a neural network:
def create_network():
model = Sequential()
model.add(Input(shape=(150,150,3)))
model.add(Conv2D(32, kernel_size=3,strides=(1, 1),activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(512, activation='relu'))
model.add(Dense(1, activation='relu'))
model.compile(optimizer = 'rmsprop',
loss = 'binary_crossentropy',
metrics = ['accuracy'])
return model
and then I call the model:
network = create_network()
Then I find the model:
def fit_model(X_train, y_train, network=create_network()):
model = network
history = model.fit(X_train,
y_train,
epochs=2,
validation_data=(X_test, y_test),
batch_size=32,
verbose=2
)
return history
and call this function:
model = fit_model(X_train,y_train)
I want to visualise the intermediate activations in this model (i.e. every channel in every intermediate activation), for a random image.
So I have this code:
images = []
for img_path in glob.glob('test_image*.JPEG'):
image1 = mpimg.imread(img_path)
open_file = image1 / 255
resize = cv2.resize(open_file,(150,150))
print(resize.shape)
images.append(resize)
plt.figure(figsize=(20,10))
columns = 5
for i, image in enumerate(images):
plt.subplot(len(images) / columns + 1, columns, i + 1)
plt.imshow(image)
print(network.summary())
layer_outputs = [layer.output for layer in model.layers[:]]
activation_model = model.Model(inputs=model.input, outputs=layer_outputs)
activations = activation_model.predict(np.expand_dims(images[0]), axis=0)
When I run this I get the error:
'History' object has no attribute 'layers'
So then I thought ok I'm meant to run this on the network architecture with the layers itself, and not the model that's been fit, so I changed the last three lines to:
layer_outputs = [layer.output for layer in network.layers[:]]
activation_model = network.Model(inputs=network.input, outputs=layer_outputs)
activations = activation_model.predict(np.expand_dims(images[0]), axis=0)
And I get:
AttributeError: 'Sequential' object has no attribute 'Model'
Then I thought maybe initially I should be reading in the layers into layer_outputs, but then using the model in the activation_model:
layer_outputs = [layer.output for layer in network.layers[:]]
activation_model = model.Model(inputs=model.input, outputs=layer_outputs)
activations = activation_model.predict(np.expand_dims(images[0]), axis=0)
But I get:
'History' object has no attribute 'Model'
Could someone show me where I'm going wrong to visualise my intermediate activations?