我有这个实现神经网络的功能:
def create(self, size_1l, size_2l, size_3l=0, size_4l=0):
"""
This function build the denoising autoencoder
using the parameters as size, the first is the input layer,
the third and the fourth if equal to 0 are omitted.
"""
input_layer = Input(shape=(size_1l, size_1l, 1))
# encoder
x = Conv2D(size_2l, (3, 3), activation='relu', padding='same', use_bias=True)(input_layer)
if size_3l > 0:
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(size_3l, (3, 3), activation='relu', padding='same', use_bias=True)(x)
if size_4l > 0:
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(size_4l, (3, 3), activation='relu', padding='same', use_bias=True)(x)
x = MaxPooling2D((2, 2), padding='same')(x) # encoded layer
# decoder
if size_4l > 0:
x = Conv2D(size_4l, (3, 3), activation='relu', padding='same', use_bias=True)(x)
x = UpSampling2D((2, 2))(x)
if size_3l > 0:
x = Conv2D(size_3l, (3, 3), activation='relu', padding='same', use_bias=True)(x)
x = UpSampling2D((2, 2))(x)
x = Conv2D(size_2l, (3, 3), activation='relu', padding='same', use_bias=True)(x)
x = UpSampling2D((2, 2))(x)
output_layer = Conv2D(1, (3, 3), activation='tanh', padding='same', use_bias=True)(x)
# building
self.autoencoder = Model(input_layer, output_layer)
self.autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy', metrics=['accuracy'])
这个培训代码:
def train(self, training_data, target_data, training_test_data, target_test_data, epochs=100, batch_size=32, verbose=0):
history = self.autoencoder.fit(training_data, target_data,
epochs=epochs,
batch_size=batch_size,
shuffle=True,
verbose=1,
validation_data=(training_test_data, target_test_data))
问题是在训练期间准确度值会不断下降,如下所示:
有一些建议吗?怎么了?为什么在学习过程中准确性的价值不会增加?
由于