Tensorflow 老式Keras命令的现代语法;卷积2D;?
我在研究不同的CNN体系结构以预测CIFAR10数据集,我发现了这个有趣的Github存储库: 我尝试运行该模型,但它是在6年前创建的,以下Keras命令不再有效: 添加(卷积2D(32,3,3,3,border_mode='full')) 如何将此命令转换为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模式
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个。。。