这是您的频谱图的 VGG16 实现,您的输入图像应该具有尺寸 (999,13),其中 999 表示时间暗淡,13 是过滤器的数量。
您可以根据需要更改一些中间参数。
from tensorflow.keras import models
import numpy as np
import tensorflow as tf
from tensorflow.keras.layers import *
def VGG16_1d(classes = 3):
img_input = Input((999,13))
# Block 1
x = layers.Conv1D(64, 3,
activation='relu',
padding='same',
name='block1_conv1')(img_input)
x = layers.Conv1D(64, 3,
activation='relu',
padding='same',
name='block1_conv2')(x)
x = layers.MaxPooling1D(2, strides=2, name='block1_pool', padding='same')(x)
# Block 2
x = layers.Conv1D(128, 3,
activation='relu',
padding='same',
name='block2_conv1')(x)
x = layers.Conv1D(128, 3,
activation='relu',
padding='same',
name='block2_conv2')(x)
x = layers.MaxPooling1D(2, strides=2, name='block2_pool', padding='same')(x)
# Block 3
x = layers.Conv1D(256, 3,
activation='relu',
padding='same',
name='block3_conv1')(x)
x = layers.Conv1D(256, 3,
activation='relu',
padding='same',
name='block3_conv2')(x)
x = layers.Conv1D(256, 3,
activation='relu',
padding='same',
name='block3_conv3')(x)
x = layers.MaxPooling1D(2, strides=2, name='block3_pool', padding='same')(x)
# Block 4
x = layers.Conv1D(512, 3,
activation='relu',
padding='same',
name='block4_conv1')(x)
x = layers.Conv1D(512, 3,
activation='relu',
padding='same',
name='block4_conv2')(x)
x = layers.Conv1D(512, 3,
activation='relu',
padding='same',
name='block4_conv3')(x)
x = layers.MaxPooling1D(2, strides=2, name='block4_pool', padding='same')(x)
# Block 5
x = layers.Conv1D(512, 3,
activation='relu',
padding='same',
name='block5_conv1')(x)
x = layers.Conv1D(512, 3,
activation='relu',
padding='same',
name='block5_conv2')(x)
x = layers.Conv1D(512, 3,
activation='relu',
padding='same',
name='block5_conv3')(x)
x = layers.MaxPooling1D(2, strides=2, name='block5_pool', padding='same')(x)
# Classification block
x = layers.Flatten(name='flatten')(x)
x = layers.Dense(128, activation='relu', name='fc1')(x) # reduced dim for 1-d task
x = layers.Dense(128, activation='relu', name='fc2')(x)
x = layers.Dense(classes, activation='softmax', name='predictions')(x)
# Create model.
model = models.Model(img_input, x, name='vgg16')
return model
model = VGG16_1d(3)
model.summary()
Model: "vgg16"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_5 (InputLayer) [(None, 999, 13)] 0
_________________________________________________________________
block1_conv1 (Conv1D) (None, 999, 64) 2560
_________________________________________________________________
block1_conv2 (Conv1D) (None, 999, 64) 12352
_________________________________________________________________
block1_pool (MaxPooling1D) (None, 500, 64) 0
_________________________________________________________________
block2_conv1 (Conv1D) (None, 500, 128) 24704
_________________________________________________________________
block2_conv2 (Conv1D) (None, 500, 128) 49280
_________________________________________________________________
block2_pool (MaxPooling1D) (None, 250, 128) 0
_________________________________________________________________
block3_conv1 (Conv1D) (None, 250, 256) 98560
_________________________________________________________________
block3_conv2 (Conv1D) (None, 250, 256) 196864
_________________________________________________________________
block3_conv3 (Conv1D) (None, 250, 256) 196864
_________________________________________________________________
block3_pool (MaxPooling1D) (None, 125, 256) 0
_________________________________________________________________
block4_conv1 (Conv1D) (None, 125, 512) 393728
_________________________________________________________________
block4_conv2 (Conv1D) (None, 125, 512) 786944
_________________________________________________________________
block4_conv3 (Conv1D) (None, 125, 512) 786944
_________________________________________________________________
block4_pool (MaxPooling1D) (None, 63, 512) 0
_________________________________________________________________
block5_conv1 (Conv1D) (None, 63, 512) 786944
_________________________________________________________________
block5_conv2 (Conv1D) (None, 63, 512) 786944
_________________________________________________________________
block5_conv3 (Conv1D) (None, 63, 512) 786944
_________________________________________________________________
block5_pool (MaxPooling1D) (None, 32, 512) 0
_________________________________________________________________
flatten (Flatten) (None, 16384) 0
_________________________________________________________________
fc1 (Dense) (None, 128) 2097280
_________________________________________________________________
fc2 (Dense) (None, 128) 16512
_________________________________________________________________
predictions (Dense) (None, 3) 387
=================================================================
Total params: 7,023,811
Trainable params: 7,023,811
Non-trainable params: 0