为了预测CIFAR10数据集,我研究了不同的CNN体系结构,我发现了一个有趣的Github存储库:
https://gist.github.com/wielandbrendel/ccf1ff6f8f92139439be
我试图运行该模型,但它是在6年前创建的,下面的Keras命令不再有效:
model.add(Convolution2D(32,3,3,3,Convolution2D=‘full’))
如何将此命令转换为Conv2D的现代Keras语法?
当我试图输入Convolution2D(32, 3, 3, 3, ...)中的整数序列时,会在Keras中得到一个错误?我猜32是通道的数量,然后我们指定一个3x3内核大小,但我不确定最后提到的3的含义(第4位)。
PS。将border_mode更改为padding = 'valid'或'same'将返回以下错误:
model.add(Convolution2D(32, 3, 3, 3, padding='valid'))
TypeError: __init__() got multiple values for argument 'padding'发布于 2021-04-26 00:37:14
您所跟踪的gist是回溯的,也有一些问题。你现在不需要这么做了。这是它的更新版本。尝尝这个。
Imports和DataSet
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import (Dense, Dropout, Activation,
Flatten, Conv2D, MaxPooling2D)
from tensorflow.keras.optimizers import SGD, Adadelta, Adagrad
import tensorflow as tf
# parameters
batch_size = 32
nb_classes = 10
nb_epoch = 5
# the data, shuffled and split between tran and test sets
(X_train, y_train), (X_test, y_test) = tf.keras.datasets.cifar10.load_data()
# convert class vectors to binary class matrices
Y_train = tf.keras.utils.to_categorical(y_train, nb_classes)
Y_test = tf.keras.utils.to_categorical(y_test, nb_classes)
# train model
X_train = X_train.astype("float32") / 255
X_test = X_test.astype("float32") / 255
X_train.shape, y_train.shape, X_test.shape, y_test.shape
((50000, 32, 32, 3), (50000, 1), (10000, 32, 32, 3), (10000, 1))建模
model = Sequential()
model.add(Conv2D(filters=32, kernel_size=(3, 3),
strides=(1, 1), activation='relu', padding="same"))
model.add(Activation('relu'))
model.add(Conv2D(filters=32, kernel_size=(3, 3),
strides=(1, 1), activation='relu', padding="same"))
model.add(Activation('relu'))
model.add(MaxPooling2D((2, 2)))
model.add(Dropout(0.25))
model.add(Conv2D(filters=32, kernel_size=(3, 3),
strides=(1, 1), activation='relu', padding="same"))
model.add(Activation('relu'))
model.add(Conv2D(filters=32, kernel_size=(3, 3),
strides=(1, 1), activation='relu', padding="same"))
model.add(Activation('relu'))
model.add(MaxPooling2D((2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(nb_classes))
model.add(Activation('softmax'))
# let's train the model using SGD + momentum (how original).
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])编译并运行
model.fit(X_train, Y_train, batch_size=batch_size, epochs=nb_epoch)
# test score & top 1 performance
score = model.evaluate(X_test, Y_test, batch_size=batch_size)
y_hat = model.predict(X_test)
yhat = np.argmax(y_hat, 1)
top1 = np.mean(yhat == np.squeeze(y_test))
print('Test score/Top1', score, top1)发布于 2021-04-23 18:33:47
Convolutional2D现在被命名为Conv2D,但是仍然有Convolutional2D的别名,所以这不是问题。
border_mode参数不再可用,等效的是padding,有选项valid或same。
尝试两种方法,看看其中任何一种是否适合输出的形状,并允许代码工作。
https://stackoverflow.com/questions/67234694
复制相似问题