python - 反复保存Conv2D(tensorflow)的结果,覆盖同一个变量
问题描述
我一直在关注一些 tensorflow 教程来完善一些 CNN 技能。为了向 CNN 添加层,我一直这样做:
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),
activation='relu',
input_shape=input_shape))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))
model.compile(loss=keras.losses.categorical_crossentropy,
optimizer=keras.optimizers.Adadelta(),
metrics=['accuracy'])
但是我看到了一些对我来说使用了一些非常违反直觉的语法的例子,例如:
#Encoder
encoder_input = Input(shape=(256, 256, 1,))
encoder_output = Conv2D(64, (3,3), activation='relu', padding='same', strides=2)(encoder_input)
encoder_output = Conv2D(128, (3,3), activation='relu', padding='same')(encoder_output)
encoder_output = Conv2D(128, (3,3), activation='relu', padding='same', strides=2)(encoder_output)
encoder_output = Conv2D(256, (3,3), activation='relu', padding='same')(encoder_output)
encoder_output = Conv2D(256, (3,3), activation='relu', padding='same', strides=2)(encoder_output)
encoder_output = Conv2D(512, (3,3), activation='relu', padding='same')(encoder_output)
encoder_output = Conv2D(512, (3,3), activation='relu', padding='same')(encoder_output)
encoder_output = Conv2D(256, (3,3), activation='relu', padding='same')(encoder_output)
我刚刚假设您必须定义一个模型,然后使用model.add
适当的图层功能添加图层。
在第二个代码块中,他们甚至没有定义模型。然后他们只是一遍又一遍地重新定义同一个变量。如果Con2D
函数直接影响到 tensorflow 模型,为什么要保存到变量中呢?
我注意到(encoder_input)
每行末尾的(这是一个元组吗?)或类似的。这是我以前从未见过的一些特殊语法吗?它是通用的 python 语法还是特定于 tensorflow?
解决方案
到时候,Keras
为您提供了两种定义网络模型的方法。可能你想看看这些文章:
因此,encoder_input
在您的情况下,它不是元组,它必须是张量。您所做的就是Conv2D(64, (3,3), activation='relu', padding='same', strides=2)(encoder_input)
将.encoder_input
Conv2D()
推荐阅读
- linux - 如何确保子进程具有正确的用户 ID?
- java - 使用 POJO 存储 API 测试的测试数据
- node.js - rethinkdb:如何按两个属性排序并在其中一个属性之间使用
- javascript - 当有多个按钮时播放特定的视频文件,视频
- jquery - fullpage.js - 页面加载时未定义的变量
- bash - 每个主题迭代的 Bash 脚本
- c# - 从 HttpRequest 反序列化在 Web api 中无法正常工作
- java - 具有实现接口的类列表作为参数的 Java 函数
- mercurial - diff 出乎意料地显示所有行都已修改 - 但它们没有
- r - 在 R 中的数据框中聚合不同级别的数据