首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >老式Keras命令"Convolution2D“的现代语法?

老式Keras命令"Convolution2D“的现代语法?
EN

Stack Overflow用户
提问于 2021-04-23 17:45:18
回答 2查看 66关注 0票数 1

为了预测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'将返回以下错误:

代码语言:javascript
复制
    model.add(Convolution2D(32, 3, 3, 3, padding='valid'))
TypeError: __init__() got multiple values for argument 'padding'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-26 00:37:14

您所跟踪的gist是回溯的,也有一些问题。你现在不需要这么做了。这是它的更新版本。尝尝这个。

Imports和DataSet

代码语言:javascript
复制
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))

建模

代码语言:javascript
复制
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'])

编译并运行

代码语言:javascript
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2021-04-23 18:33:47

Convolutional2D现在被命名为Conv2D,但是仍然有Convolutional2D的别名,所以这不是问题。

border_mode参数不再可用,等效的是padding,有选项validsame

尝试两种方法,看看其中任何一种是否适合输出的形状,并允许代码工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67234694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档