我需要以下代码的帮助。运行以下模型后:
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
谢谢你
您需要设置模型运行的变量,然后使用此变量来获取一些指标
history = model.fit(x_train, y_train, batch_size=num_batch_size, epochs=num_epochs, callbacks=[checkpointer], verbose=1)
....
train_acc = history.history['accuracy']
希望有帮助