相比较r语言的s3s4rc r6的混乱,python的面向对象比较规范,看着也比较舒服
class ClassName:
'类的帮助信息' #类文档字符串
class_suite #类体
class 语句来创建一个新类,class 之后为类的名称并以冒号结尾:
后续缩进一个tab用于写类的内容
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class Employee:
'所有员工的基类'# 这里的内容为类文档,通过__doc__调动
empCount = 0 # 这里定义的内容为类属性
def __init__(self, name, salary):# 初始化函数,也是每个实例化对象的属性
self.name = name
self.salary = salary
Employee.empCount += 1 # 这里调用类属性,并实现叠加
def displayCount(self):
print "Total Employee %d" % Employee.empCount
def displayEmployee(self):
print "Name : ", self.name, ", Salary: ", self.salary
"创建 Employee 类的第一个对象"
emp1 = Employee("Zara", 2000)
"创建 Employee 类的第二个对象"
emp2 = Employee("Manni", 5000)
self这个词指代的是类的实例化对象,因此init函数中的属性为实例化对象的属性
对于类属性的访问,通过点来进行,如 Employee.empCount
# 调用实例化对象的函数
emp1.displayEmployee()
emp2.displayEmployee()
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class Parent: # 定义父类
parentAttr = 100 # 父类的类属性
def __init__(self):
print "调用父类构造函数"
def parentMethod(self):
print '调用父类方法'
def setAttr(self, attr):
Parent.parentAttr = attr
def getAttr(self):
print "父类属性 :", Parent.parentAttr
class Child(Parent): # 定义子类
def __init__(self):
print "调用子类构造方法"
def childMethod(self):
print '调用子类方法'
c = Child() # 实例化子类
c.childMethod() # 调用子类的方法
c.parentMethod() # 调用父类方法
c.setAttr(200) # 再次调用父类的方法 - 设置属性值
c.getAttr() # 再次调用父类的方法 - 获取属性值
class MyModel(Model):
# 需要继承Model
def __init__ (self):
super(MyModel, self).__init__()# super用于调用父类,init为初始化函数
# 定义网络结构块,super继承要与类名一致
def call(self, x):
# 调用网络结构块,实现前向传播
return y
model = MyModel()
使用类方法建立鸢尾花分类神经网络
import tensorflow as tf
from tensorflow.keras.layers import Dense
from tensorflow.keras import Model
from sklearn import datasets
import numpy as np
# 导入鸢尾花数据
x_train = datasets.load_iris().data
y_train = datasets.load_iris().target
# 使用shuffle将数据集打乱,避免数据顺序对模型的影响
np.random.seed(116)
np.random.shuffle(x_train)
np.random.seed(116)
np.random.shuffle(y_train)
tf.random.set_seed(116)
# 搭建网络
class IrisModel(Model):
def __init__(self):
super(IrisModel, self).__init__() # 调用irismodeld父类model属性,
# 然后把类irismodel的对象self转换为类model的对象,然后“被转换”的类model对象调用自己的_init_函数
# 建立全连接层,激活函数为softmax l2正则化避免过拟合
self.d1 = Dense(3, activation='softmax', kernel_regularizer=tf.keras.regularizers.l2())
def call(self, x): # 调用搭建的网络,返回y
y = self.d1(x)
return y
#实例化对象
model = IrisModel()
# 搭建优化器sgd,损失函数,和衡量指标
model.compile(optimizer=tf.keras.optimizers.SGD(lr=0.1),
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
metrics=['sparse_categorical_accuracy'])
# 模型拟合,批量32,循环500次
model.fit(x_train, y_train, batch_size=32, epochs=500, validation_split=0.2, validation_freq=20)
model.summary()
看山不是山
love&peace