首先要知道tf直接开发需要对神经网络有全面清晰的认知、基本功要扎实
tf的API是低级API,开发起来有难度,考验编程者水平。
而keras
在tf的基础上开发出高级API,降低入门难度
●Keras
遵循减少认知困难的最佳实践:它提供一致且简单的API,它将常见用例所需的用户操作数量降至最低,并且在用户错误时提供清晰和可操作的反馈。
●因为Keras
与底层深度学习语言(特别是TensorFlow) 集成在一起,所以它可以让你实现任何你可以用基础语言编写的东西。特别是,tf. keras作为Keras API可以与TensorFlow 工作流无缝集成。
●Keras
被工业界和学术界广泛采用
官方文档:
https://keras.io/zh/
https://www.keraschina.com/keras_intro/
http://tensornews.cn/
http://woshicver.com/
●要使用该模块需要下载图片读取库
pip install pillow
图片特征值处理-图片大小
●统一到一个大小, 神经网络模型要求图片的大小必须固定。300 * 300
●减少训练的计算开销
每个像素点,都是0~255之间
load_img(path=filepath, target. size)
img_to_array(img, data. format=None, dtype=None)
设置为"NHWC"时,排列顺序为[batch, height, width, channels];
设置为"NCHW"时,排列顺序为[batch, channels, height, width]。
Tensorflow默认的[height, width, channel]
●tf.reshape不能对于一维中按照RGB排列方式做channel_last变换,只能做channel_first转换,否则转换结构错误
●怎么做:
参考:https://zhuanlan.zhihu.com/p/63731947
顺序模型是多个网络层的线性堆叠。
你可以通过将网络层实例的列表传递给 Sequential
的构造器,来创建一个 Sequential 模型:
from keras.models import Sequential
from keras.layers import Dense, Activation
model = Sequential([
Dense(32, input_shape=(784,)),
Activation('relu'),
Dense(10),
Activation('softmax'),
])
Dense:
Dense即全连接层,逻辑上等价于这样一个函数:
权重W为m*n的矩阵.输入x为n维向量.激活函数Activation.
偏置bias.输出向量out为m维向量.
out=Activation(Wx+bias).
即一个线性变化加一个非线性变化产生输出.这是深度神经网络非常基本又十分强大的结构。它的能力可以参考万能近似定理.很多其他的层,比如卷积层,都是在全连接的基础上加了很多先验形成的。
(材料链接:https://www.zhihu.com/question/335678541/answer/756464930)
优化算法:
from tensorflow.python.keras.optimizers import SGD
from tensorflow.python.keras.losses import binary_ crossentropy
from tensorflow.python.keras.losses import categorical .crossentropy
from tensorflow.python.keras.losses import sparse.categorical.crossentropy
model.compile()
model.fit(x=None,y=None,batch_ size=None,epochs=1.callbacks=None)
案例步骤:
进行模型编写
双层: 128个神经元,全连接层10个类别输出
Dense(128, activation=tf.nn.relu):
定义网络结构以及初始化权重偏置参数
class SingleNN(object) :
model = keras.Sequential( [
keras.layers.Flatten( input_ shape=(28,28)),
keras.layers.Dense(128,activation=tf.nn.relu),
keras.layers.Dense(10,activation=tf.nn.softmax)
])
这里我们model只是放在类中,作为类的固定模型属性,这里的激活函数暂时使用tf.nn.relu函数
编译定义优化过程:
这里选择我们SGD优化器
keras.optimizers.SGD(keras. opt imizers. SGD(lr=0.01)
loss:tf.keras.losses.sparse_ categorical_crossentropy
metrics: accuracy
def compile(self) :
SingleNN.model.compile( opt imizer=keras.opt imizers.SGD(lr=0.01),
loss=tf.keras.losses.sparse_categorical_crossentropy,
metrics=['accuracy'])
return None
训练:
关于迭代次数与每次迭代样本数
设置batch_size=32或者128查看效果(值如何设置,优化部分会进行讲解)
def fit(self) :
SingleNN.model.fit(self.train, self.train_label, epochs=5,batch_size=32 )
return None
def evaluate(self) :
test_loss, test_acc = SingleNN.model.evaluate(self.test, self.test_label)
print(test_loss, test_acc)
return None
Keras之Conv2D
参考:https://blog.csdn.net/econe_wei/article/details/94649003