因为学习python的opencv刚好接触了tensorflow,学一下顺便记录一下
区别于pytorch框架,tensorflow好像没有forward函数,因此每一层的连接靠的是上一次函数输出作为输入,同时其应该要再模型函数开始时定义input和结束时定义model
开始时定义input:
inputs = tf.keras.layers.Input(shape=(h,w,3))
结束时定义model并返回:
model = tf.keras.models.Model(inputs=inputs, outputs=conv7)
return model
tf.keras.layers.Conv2D()
tf.keras.layers.Conv2D(
filters,
kernel_size,
strides=(1, 1),
padding='valid',
data_format=None,
dilation_rate=(1, 1),
groups=1,
activation=None,
use_bias=True,
kernel_initializer='glorot_uniform',
bias_initializer='zeros',
kernel_regularizer=None,
bias_regularizer=None,
activity_regularizer=None,
kernel_constraint=None,
bias_constraint=None,
**kwargs
)
其实和pytorch还是很相似的,但是一些比较只管的区别就是
①pytorch的输入在传入参数中,和其它参数写在一块,但是在tensorflow中独立了出来
conv1 = tf.keras.layers.Conv2D(16,(3,3),activation='relu',padding='same')(inputs)
②pytorch的输出用的是output channels,tensorflow感觉有点像是kernel_size出来的
tf.keras.layers.MaxPool2D
tf.keras.layers.MaxPool2D(
pool_size=(2, 2),
strides=None,
padding='valid',
data_format=None,
**kwargs
)
tf.keras.layers.UpSampling2D(
size=(2, 2), data_format=None, interpolation='nearest', **kwargs
)
在opencv中使用了compile为模型配置了optimizer,loss,metrics
model.compile(optimizer='adam', loss='binary_crossentropy',metrics=['accuracy'])
训练
model.fit(images,labels,epochs=100,batch_size=10)
以上代码基于焊件缺陷检测
np.reshape
这一步操作估计是函数predict的input有shape上的要求