老式 Keras 命令的现代语法 "Convolution2D"?
Modern syntax for old-fashioned Keras command "Convolution2D"?
我正在研究不同的 CNN 架构来预测 CIFAR10 数据集,我发现这个有趣的 Github 存储库:
https://gist.github.com/wielandbrendel/ccf1ff6f8f92139439be
我尝试 运行 模型,但它是 6 年前创建的,以下 Keras 命令不再有效:
model.add(Convolution2D(32, 3, 3, 3, border_mode='full'))
如何将此命令翻译成 Conv2D
的现代 Keras 语法?
当我尝试在 Convolution2D(32, 3, 3, 3, ...)
中输入整数序列时,我在 Keras 中遇到错误?
我猜 32
是通道数,然后我们指定一个 3x3
内核大小,但我不确定最后提到的 3
的含义(第4位)。
PS。将border_mode
改成padding = 'valid'
或'same'
returns出现如下错误:
model.add(Convolution2D(32, 3, 3, 3, padding='valid'))
TypeError: __init__() got multiple values for argument 'padding'
Convolutional2D
现在被命名为 Conv2D
,但是 Convolutional2D
仍然有一个别名,所以这不是问题。
border_mode
参数不再可用,等同于 padding
,选项为 valid
或 same
。
尝试两者,看看是否有任何符合输出的形状并允许代码工作。
您关注的 gist
已过时,并且存在一些问题。你现在不需要遵循这个。这是它的更新版本。试试这个。
导入和数据集
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)
我正在研究不同的 CNN 架构来预测 CIFAR10 数据集,我发现这个有趣的 Github 存储库:
https://gist.github.com/wielandbrendel/ccf1ff6f8f92139439be
我尝试 运行 模型,但它是 6 年前创建的,以下 Keras 命令不再有效:
model.add(Convolution2D(32, 3, 3, 3, border_mode='full'))
如何将此命令翻译成 Conv2D
的现代 Keras 语法?
当我尝试在 Convolution2D(32, 3, 3, 3, ...)
中输入整数序列时,我在 Keras 中遇到错误?
我猜 32
是通道数,然后我们指定一个 3x3
内核大小,但我不确定最后提到的 3
的含义(第4位)。
PS。将border_mode
改成padding = 'valid'
或'same'
returns出现如下错误:
model.add(Convolution2D(32, 3, 3, 3, padding='valid'))
TypeError: __init__() got multiple values for argument 'padding'
Convolutional2D
现在被命名为 Conv2D
,但是 Convolutional2D
仍然有一个别名,所以这不是问题。
border_mode
参数不再可用,等同于 padding
,选项为 valid
或 same
。
尝试两者,看看是否有任何符合输出的形状并允许代码工作。
您关注的 gist
已过时,并且存在一些问题。你现在不需要遵循这个。这是它的更新版本。试试这个。
导入和数据集
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)