CNN 模型 Python

问题描述 投票:0回答:1

我需要以下代码的帮助。运行以下模型后:

model=Sequential()
model.add(Conv1D(256, kernel_size=5, strides=1, padding='same', activation='relu', input_shape = (162,1)))
model.add(MaxPooling1D(pool_size=5, strides = 2, padding = 'same'))

model.add(Conv1D(256, kernel_size=5, strides=1, padding='same', activation='relu'))
model.add(MaxPooling1D(pool_size=5, strides = 2, padding = 'same'))

model.add(Conv1D(128, kernel_size=5, strides=1, padding='same', activation='relu'))
model.add(MaxPooling1D(pool_size=5, strides = 2, padding = 'same'))
model.add(Dropout(0.2))

model.add(Conv1D(64, kernel_size=5, strides=1, padding='same', activation='relu'))
model.add(MaxPooling1D(pool_size=5, strides = 2, padding = 'same'))

model.add(Flatten())
model.add(Dense(units=32, activation='relu'))
model.add(Dropout(0.3))

model.add(Dense(units=5, activation='softmax'))
model.compile(optimizer = 'adam' , loss = 'sparse_categorical_crossentropy' , metrics = ['accuracy'])

model.summary()

我得到以下输出:


Model: "sequential"


 Layer (type)                Output Shape              Param #   
=================================================================
 conv1d (Conv1D)             (None, 162, 256)          1536      
                                                                 
 max_pooling1d (MaxPooling1D  (None, 81, 256)          0         
 )                                                               
                                                                 
 conv1d_1 (Conv1D)           (None, 81, 256)           327936    
                                                                 
 max_pooling1d_1 (MaxPooling  (None, 41, 256)          0         
 1D)                                                             
                                                                 
 conv1d_2 (Conv1D)           (None, 41, 128)           163968    
                                                                 
 max_pooling1d_2 (MaxPooling  (None, 21, 128)          0         
 1D)                                                             
                                                                 
 dropout (Dropout)           (None, 21, 128)           0         
                                                                 
 conv1d_3 (Conv1D)           (None, 21, 64)            41024     
                                                                 
 max_pooling1d_3 (MaxPooling  (None, 11, 64)           0         
 1D)                                                             
                                                                 
 flatten (Flatten)           (None, 704)               0         
                                                                 
 dense (Dense)               (None, 32)                22560     
                                                                 
 dropout_1 (Dropout)         (None, 32)                0         
                                                                 
 dense_1 (Dense)             (None, 5)                 165       
                                                                 
=================================================================
Total params: 557,189
Trainable params: 557,189
Non-trainable params: 0

下面的代码也可以正常运行:

model.compile(loss='categorical_crossentropy',metrics=['accuracy'],optimizer='adam')

from keras.callbacks import ModelCheckpoint
from datetime import datetime 
from keras.optimizers import Adam

num_epochs = 200
num_batch_size = 32

checkpointer = ModelCheckpoint(filepath='saved_models/audio_classification.hdf5', 
                               verbose=1, save_best_only=True)
start = datetime.now()

model.fit(x_train, y_train, batch_size=num_batch_size, epochs=num_epochs, callbacks=[checkpointer], verbose=1)

duration = datetime.now() - start
print("Training completed in time: ", duration)

以上输出:

纪元199/200 32/32 [================================] - ETA:0秒 - 损失:0.5825 - 准确性:0.8432警告:tensorflow :只能在 val_loss 可用的情况下保存最佳模型,跳过。 32/32 [================================] - 8s 265ms/步 - 损失:0.5825 - 准确度:0.8432 200/200 纪元 32/32 [================================] - ETA:0秒 - 损失:0.5922 - 准确性:0.8432警告:tensorflow :只能在 val_loss 可用的情况下保存最佳模型,跳过。 32/32 [================================] - 6s 196ms/步 - 损失:0.5922 - 准确度:0.8432 训练及时完成:0:25:23.777901

但我不断收到以下代码行的错误:

print("Accuracy of our model on test data : " , model.evaluate(x_test,y_test, verbose=0)[1]*100, "%")

epochs = [i for i in range(200)]
fig , ax = plt.subplots(1,2)
train_acc = model['accuracy']
train_loss = model['loss']
test_acc = model['val_accuracy']
test_loss = model['val_loss']

fig.set_size_inches(20,6)
ax[0].plot(epochs , train_loss , label = 'Training Loss')
ax[0].plot(epochs , test_loss , label = 'Testing Loss')
ax[0].set_title('Training & Testing Loss')
ax[0].legend()
ax[0].set_xlabel("Epochs")

ax[1].plot(epochs , train_acc , label = 'Training Accuracy')
ax[1].plot(epochs , test_acc , label = 'Testing Accuracy')
ax[1].set_title('Training & Testing Accuracy')
ax[1].legend()
ax[1].set_xlabel("Epochs")
plt.show()

请参阅下面的错误;

Accuracy of our model on test data :  89.82036113739014 %
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-36-d111bfc0ff5e> in <cell line: 5>()
      3 epochs = [i for i in range(200)]
      4 fig , ax = plt.subplots(1,2)
----> 5 train_acc = model['accuracy']
      6 train_loss = model['loss']
      7 test_acc = model['val_accuracy']

TypeError; 'Sequential' object is not subscriptable


谢谢你

python tensorflow conv-neural-network librosa
1个回答
0
投票

您需要设置模型运行的变量,然后使用此变量来获取一些指标

history = model.fit(x_train, y_train, batch_size=num_batch_size, epochs=num_epochs, callbacks=[checkpointer], verbose=1)
....
train_acc = history.history['accuracy']

希望有帮助

© www.soinside.com 2019 - 2024. All rights reserved.