Tensorflow 老式Keras命令的现代语法;卷积2D;?

Tensorflow 老式Keras命令的现代语法;卷积2D;?,tensorflow,machine-learning,keras,deep-learning,conv-neural-network,Tensorflow,Machine Learning,Keras,Deep Learning,Conv Neural Network,我在研究不同的CNN体系结构以预测CIFAR10数据集,我发现了这个有趣的Github存储库: 我尝试运行该模型,但它是在6年前创建的,以下Keras命令不再有效: 添加(卷积2D(32,3,3,3,border_mode='full')) 如何将此命令转换为Conv2D的现代Keras语法 当我试图在卷积2D(32,3,3,3,…)中输入整数序列时,我在Keras中得到一个错误? 我猜32是通道数,然后我们指定3x3内核大小,但我不确定最后提到的3的含义(第4位) 注:将border\u模式

我在研究不同的CNN体系结构以预测CIFAR10数据集,我发现了这个有趣的Github存储库:

我尝试运行该模型,但它是在6年前创建的,以下Keras命令不再有效:

添加(卷积2D(32,3,3,3,border_mode='full'))

如何将此命令转换为
Conv2D
的现代Keras语法

当我试图在卷积2D(32,3,3,3,…)中输入整数序列时,我在Keras中得到一个错误? 我猜
32
是通道数,然后我们指定
3x3
内核大小,但我不确定最后提到的
3
的含义(第4位)

注:将
border\u模式更改为
padding='valid'
'same'
将返回以下错误:

    model.add(Convolution2D(32, 3, 3, 3, padding='valid'))
TypeError: __init__() got multiple values for argument 'padding'

covolional2d
现在命名为
Conv2D
,但是
covolional2d
仍然有一个别名,所以这不是问题

border\u模式
参数不再可用,等效的参数是
填充
,选项为
有效
相同


尝试这两种方法,看看它们是否符合输出的形状,并允许代码工作。

下面的
要点是回溯的,也有一些问题。你现在不需要遵循这个。这是它的更新版本。试试这个

导入和数据集

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)

你好,尼古拉斯·热尔韦,谢谢你的留言。我试图查看Keras文档,但我不确定作为参数传递给代码的最后一个
3
的含义。请告诉我您是否熟悉第四个参数的含义。@C-3PO如果您对给定的答案有任何疑问,请告诉我。@M.Innat谢谢您的回答,代码确实有效。如果我有任何问题,我会告诉你的。非常感谢。你好@dataista,谢谢你的帮助。我试图应用您提到的更改,但我得到了以下错误:
model.add(卷积2D(32,3,3,padding='valid'))
TypeError:\uu init\uuu()为参数'padding'获取了多个值。
我认为问题是将4个整数作为参数传递不再有效。如果你知道这个整数序列的原始含义,请告诉我。我猜它的意思是,32个通道,3x3内核,然后再加上3个。。。