python - 是否有可能使用自定义层可训练权重作为 tensorflow 插件函数旋转的参数?
问题描述
我想做的是了解我的自定义层对于一个域的图像的最佳旋转是什么。我使用 tensorflow 插件函数并希望将权重值作为参数传递。有我的自定义层
class RotationLayer(Layer):
def __init__(self, num_outputs, name = 'RotationLayer', **kwargs):
super(RotationLayer, self).__init__(**kwargs)
self.num_outputs = num_outputs
def build(self, input_shape):
super(RotationLayer, self).build(input_shape)
self.w = self.add_weight(
shape=[1], initializer="uniform", trainable=True
)
def call(self, inputs, **kwargs):
rotated = tfa.image.rotate(inputs, (self.w*100)*math.pi/180)
rotated = tf.reshape(rotated, shape=[-1,64,64,1])
return rotated
def compute_output_shape(self, input_shape):
return (input_shape[0], self.output_dim)
def get_config(self):
base = super(RotationLayer, self).get_config()
base['num_outputs'] = self.num_outputs
return dict(list(base.items()))
这一层有效,但完全毁了我的 CNN,所以我想问一下是否还有其他可能性。我的目标是衡量学习数据增强层对 CNN 架构的影响。
神经网络架构
model = Sequential()
#model.add(flipLayer)
#model.add(brightnessLayer)
#model.add(rotatioLayer)
model.add(Conv2D(48, 5, padding = 'same', activation = 'relu', input_shape=(64,64,1)))
model.add(rotatioLayer)
model.add(MaxPool2D(pool_size = 3, strides = 2))
model.add(Conv2D(64, 5, padding = 'same', activation = 'relu'))
model.add(MaxPool2D(pool_size = 3, strides = (2,2)))
model.add(Conv2D(32, 3, padding = 'same', activation = 'relu'))
model.add(Dropout(0.1))
model.add(Dense(1024, activation = 'relu'))
model.add(Flatten())
model.add(Dense(1, activation = 'sigmoid'))
model.compile(loss = 'binary_crossentropy', optimizer = 'adam', metrics = ['acc'], run_eagerly=True)
model.summary()
解决方案
推荐阅读
- r - 找出一个参数的平均值是多少个标准偏差从 0 R
- python - 事务请求不能包含对一项python的多个操作
- c++ - 如何在基于 Qt qmake 的项目中使用 CuteLogger?
- flutter - 如何禁用按钮(图标按钮)点击?
- c++ - 渲染边缘上的 CGAL::Triangulation_3 毛刺
- r - R中的sqldf比较两个data.frames并存储输出
- codesys - Codesys LD:如何从一个进程跳转到另一个进程
- python - 尝试查找并单击时出现 Selenium TimeoutException
- java - 在android应用程序中集成gmail登录的问题?
- python - 如何创建一个从元组列表中获取随机元组并在 python 中生成基本图的程序?