注解:
- 线性回归就是找到合适的权重w1,w2,w3,w4,w5乘以相应的特征之后,使得第一个预测值与20接近,第二个预测值与30接近。
先不考虑5个特征,考虑一个特征的简单情况:
注解:
- 模型参数只有用变量定义,才会被更新
import tensorflow as tf def myregession(): """ 自实现一个线性回归预测 :return: None """ #1. 准备数据 x 特征值,[100,1], 100个样本,1个特征 # y 目标值 ,[100] x=tf.random_normal([10,1],mean=1.75,stddev=0.5,name="x_data")#这个是真实的特征值 y_true= tf.matmul(x,[[0.7]])+0.8 #先假设已经知道这个线性关系,其实现实中是不知道的,为了准备准据,才这样假设的 #注:矩阵相乘必须是二维的 # 2. 建立线性回归模型,一个特征,1个权重,一个偏置,y=wx+b #w,b需要随机初始化一个值,从这个地方开始优化,从这个地方计算损失,然后在当前状态下优化 weight= tf.Variable(tf.random_normal([1,1],mean=0.0,stddev=1.0),name="w") #权重必须定义成tf的变量,因为只有用变量定义才能优化,必须是二维的,所以定义成1行1列 bias=tf.Variable(0.0,name='b') y_predict=tf.matmul(x,weight)+bias # 3. 建立损失函数,求均方误差 loss=tf.reduce_mean(tf.square(y_true-y_predict)) # 3. 梯度下降优化损失,learning_rate:0~1,2,3,5,7,10 train_op=tf.train.ProximalGradientDescentOptimizer(0.1).minimize(loss) #定义个一个初始化变量的 op init_op=tf.global_variables_initializer() #通过会话运行程序 with tf.Session() as sess: # 初始化变量 sess.run(init_op) #打印最先随机初始化的权重和偏置 print("随机初始化的参数,权重为:%f,偏置为:%f"%(weight.eval(),bias.eval())) #注:weight,bias是不能直接打印的,因为它们是op # 运行优化 #循环训练,持续优化 for i in range(300): sess.run(train_op) print("第%d次运行优化后的参数,权重为:%f,偏置为:%f" % (i,weight.eval(), bias.eval())) return None if __name__=="__main__": myregession()
运行结果:
随机初始化的参数,权重为:-1.354848,偏置为:0.000000
第0次运行优化后的参数,权重为:0.044437,偏置为:0.791866
第1次运行优化后的参数,权重为:0.629343,偏置为:1.062838
第2次运行优化后的参数,权重为:0.585432,偏置为:1.036696
第3次运行优化后的参数,权重为:0.570128,偏置为:1.024023
第4次运行优化后的参数,权重为:0.582104,偏置为:1.028211
第5次运行优化后的参数,权重为:0.588207,偏置为:1.027045
第6次运行优化后的参数,权重为:0.586259,偏置为:1.022396
第7次运行优化后的参数,权重为:0.581474,偏置为:1.017809
第8次运行优化后的参数,权重为:0.590955,偏置为:1.019490
第9次运行优化后的参数,权重为:0.588027,偏置为:1.015079
第10次运行优化后的参数,权重为:0.602153,偏置为:1.019651
第11次运行优化后的参数,权重为:0.580404,偏置为:1.003217
第12次运行优化后的参数,权重为:0.591463,偏置为:1.004237
第13次运行优化后的参数,权重为:0.595774,偏置为:1.003535
第14次运行优化后的参数,权重为:0.595237,偏置为:1.001145
第15次运行优化后的参数,权重为:0.599060,偏置为:1.000322
第16次运行优化后的参数,权重为:0.602725,偏置为:0.991215
第17次运行优化后的参数,权重为:0.603829,偏置为:0.988096
第18次运行优化后的参数,权重为:0.602487,偏置为:0.986648
第19次运行优化后的参数,权重为:0.605884,偏置为:0.986550
第20次运行优化后的参数,权重为:0.604042,偏置为:0.983545
第21次运行优化后的参数,权重为:0.602355,偏置为:0.981214
第22次运行优化后的参数,权重为:0.596113,偏置为:0.975415
第23次运行优化后的参数,权重为:0.606760,偏置为:0.977189
第24次运行优化后的参数,权重为:0.602738,偏置为:0.973720
第25次运行优化后的参数,权重为:0.609950,偏置为:0.975446
第26次运行优化后的参数,权重为:0.610627,偏置为:0.972762
第27次运行优化后的参数,权重为:0.615878,偏置为:0.972973
第28次运行优化后的参数,权重为:0.605160,偏置为:0.963195
第29次运行优化后的参数,权重为:0.612407,偏置为:0.963030
第30次运行优化后的参数,权重为:0.614817,偏置为:0.961714
第31次运行优化后的参数,权重为:0.622566,偏置为:0.962638
第32次运行优化后的参数,权重为:0.614289,偏置为:0.956235
第33次运行优化后的参数,权重为:0.610645,偏置为:0.951629
第34次运行优化后的参数,权重为:0.617491,偏置为:0.953955
第35次运行优化后的参数,权重为:0.614991,偏置为:0.950386
第36次运行优化后的参数,权重为:0.625332,偏置为:0.954501
第37次运行优化后的参数,权重为:0.615353,偏置为:0.947260
第38次运行优化后的参数,权重为:0.609533,偏置为:0.941251
第39次运行优化后的参数,权重为:0.613737,偏置为:0.942052
第40次运行优化后的参数,权重为:0.616752,偏置为:0.942939
第41次运行优化后的参数,权重为:0.626739,偏置为:0.946030
第42次运行优化后的参数,权重为:0.618459,偏置为:0.939658
第43次运行优化后的参数,权重为:0.625924,偏置为:0.941908
第44次运行优化后的参数,权重为:0.623731,偏置为:0.939157
第45次运行优化后的参数,权重为:0.632746,偏置为:0.941044
第46次运行优化后的参数,权重为:0.631843,偏置为:0.939735
第47次运行优化后的参数,权重为:0.630637,偏置为:0.936956
第48次运行优化后的参数,权重为:0.624726,偏置为:0.932112
第49次运行优化后的参数,权重为:0.625157,偏置为:0.931575
第50次运行优化后的参数,权重为:0.628606,偏置为:0.931908
第51次运行优化后的参数,权重为:0.626968,偏置为:0.929476
第52次运行优化后的参数,权重为:0.629559,偏置为:0.929083
第53次运行优化后的参数,权重为:0.638464,偏置为:0.930635
第54次运行优化后的参数,权重为:0.634066,偏置为:0.927130
第55次运行优化后的参数,权重为:0.630456,偏置为:0.923511
第56次运行优化后的参数,权重为:0.641314,偏置为:0.926191
第57次运行优化后的参数,权重为:0.634763,偏置为:0.920826
第58次运行优化后的参数,权重为:0.637910,偏置为:0.921650
第59次运行优化后的参数,权重为:0.636943,偏置为:0.919073
第60次运行优化后的参数,权重为:0.641932,偏置为:0.919631
第61次运行优化后的参数,权重为:0.634720,偏置为:0.913263
第62次运行优化后的参数,权重为:0.633579,偏置为:0.909200
第63次运行优化后的参数,权重为:0.639935,偏置为:0.909810
第64次运行优化后的参数,权重为:0.639721,偏置为:0.908694
第65次运行优化后的参数,权重为:0.636501,偏置为:0.906627
第66次运行优化后的参数,权重为:0.653992,偏置为:0.912139
第67次运行优化后的参数,权重为:0.644274,偏置为:0.905927
第68次运行优化后的参数,权重为:0.642348,偏置为:0.903722
第69次运行优化后的参数,权重为:0.642024,偏置为:0.901792
第70次运行优化后的参数,权重为:0.643270,偏置为:0.900879
第71次运行优化后的参数,权重为:0.645294,偏置为:0.900512
第72次运行优化后的参数,权重为:0.643692,偏置为:0.897751
第73次运行优化后的参数,权重为:0.648030,偏置为:0.898541
第74次运行优化后的参数,权重为:0.646292,偏置为:0.895847
第75次运行优化后的参数,权重为:0.648164,偏置为:0.895441
第76次运行优化后的参数,权重为:0.644979,偏置为:0.892343
第77次运行优化后的参数,权重为:0.647196,偏置为:0.893012
第78次运行优化后的参数,权重为:0.652922,偏置为:0.893553
第79次运行优化后的参数,权重为:0.652319,偏置为:0.891216
第80次运行优化后的参数,权重为:0.651500,偏置为:0.889262
第81次运行优化后的参数,权重为:0.654645,偏置为:0.889769
第82次运行优化后的参数,权重为:0.654939,偏置为:0.888602
第83次运行优化后的参数,权重为:0.655884,偏置为:0.888877
第84次运行优化后的参数,权重为:0.654771,偏置为:0.886318
第85次运行优化后的参数,权重为:0.652608,偏置为:0.883871
第86次运行优化后的参数,权重为:0.650169,偏置为:0.880950
第87次运行优化后的参数,权重为:0.653127,偏置为:0.881208
第88次运行优化后的参数,权重为:0.657098,偏置为:0.881663
第89次运行优化后的参数,权重为:0.658729,偏置为:0.881046
第90次运行优化后的参数,权重为:0.655218,偏置为:0.878279
第91次运行优化后的参数,权重为:0.657960,偏置为:0.878391
第92次运行优化后的参数,权重为:0.659613,偏置为:0.878608
第93次运行优化后的参数,权重为:0.657457,偏置为:0.875396
第94次运行优化后的参数,权重为:0.654799,偏置为:0.873054
第95次运行优化后的参数,权重为:0.659466,偏置为:0.874869
第96次运行优化后的参数,权重为:0.661968,偏置为:0.874692
第97次运行优化后的参数,权重为:0.659228,偏置为:0.871784
第98次运行优化后的参数,权重为:0.659425,偏置为:0.870202
第99次运行优化后的参数,权重为:0.663650,偏置为:0.871154
第100次运行优化后的参数,权重为:0.665760,偏置为:0.871523
第101次运行优化后的参数,权重为:0.662120,偏置为:0.867897
第102次运行优化后的参数,权重为:0.664033,偏置为:0.868613
第103次运行优化后的参数,权重为:0.660611,偏置为:0.865155
第104次运行优化后的参数,权重为:0.666058,偏置为:0.866706
第105次运行优化后的参数,权重为:0.667414,偏置为:0.867086
第106次运行优化后的参数,权重为:0.668685,偏置为:0.866747
第107次运行优化后的参数,权重为:0.670526,偏置为:0.866505
第108次运行优化后的参数,权重为:0.668277,偏置为:0.864677
第109次运行优化后的参数,权重为:0.664632,偏置为:0.861864
第110次运行优化后的参数,权重为:0.666806,偏置为:0.861872
第111次运行优化后的参数,权重为:0.670477,偏置为:0.863280
第112次运行优化后的参数,权重为:0.666209,偏置为:0.859820
第113次运行优化后的参数,权重为:0.669146,偏置为:0.860816
第114次运行优化后的参数,权重为:0.668842,偏置为:0.860412
第115次运行优化后的参数,权重为:0.665993,偏置为:0.858036
第116次运行优化后的参数,权重为:0.665291,偏置为:0.856715
第117次运行优化后的参数,权重为:0.666927,偏置为:0.856240
第118次运行优化后的参数,权重为:0.669004,偏置为:0.856824
第119次运行优化后的参数,权重为:0.676863,偏置为:0.859478
第120次运行优化后的参数,权重为:0.673565,偏置为:0.857701
第121次运行优化后的参数,权重为:0.670503,偏置为:0.855756
第122次运行优化后的参数,权重为:0.671946,偏置为:0.855639
第123次运行优化后的参数,权重为:0.671135,偏置为:0.854682
第124次运行优化后的参数,权重为:0.673205,偏置为:0.855262
第125次运行优化后的参数,权重为:0.671526,偏置为:0.853812
第126次运行优化后的参数,权重为:0.672092,偏置为:0.853434
第127次运行优化后的参数,权重为:0.670776,偏置为:0.852137
第128次运行优化后的参数,权重为:0.670419,偏置为:0.851202
第129次运行优化后的参数,权重为:0.671727,偏置为:0.850885
第130次运行优化后的参数,权重为:0.670163,偏置为:0.849129
第131次运行优化后的参数,权重为:0.673536,偏置为:0.850646
第132次运行优化后的参数,权重为:0.674039,偏置为:0.850536
第133次运行优化后的参数,权重为:0.673098,偏置为:0.849668
第134次运行优化后的参数,权重为:0.673306,偏置为:0.849087
第135次运行优化后的参数,权重为:0.676409,偏置为:0.850150
第136次运行优化后的参数,权重为:0.675322,偏置为:0.849117
第137次运行优化后的参数,权重为:0.676595,偏置为:0.849175
第138次运行优化后的参数,权重为:0.674664,偏置为:0.847628
第139次运行优化后的参数,权重为:0.674398,偏置为:0.846696
第140次运行优化后的参数,权重为:0.674655,偏置为:0.846086
第141次运行优化后的参数,权重为:0.673317,偏置为:0.844618
第142次运行优化后的参数,权重为:0.675167,偏置为:0.844827
第143次运行优化后的参数,权重为:0.677584,偏置为:0.845584
第144次运行优化后的参数,权重为:0.676035,偏置为:0.844436
第145次运行优化后的参数,权重为:0.679798,偏置为:0.845756
第146次运行优化后的参数,权重为:0.677477,偏置为:0.844205
第147次运行优化后的参数,权重为:0.675971,偏置为:0.842626
第148次运行优化后的参数,权重为:0.679080,偏置为:0.843675
第149次运行优化后的参数,权重为:0.678317,偏置为:0.842902
第150次运行优化后的参数,权重为:0.678779,偏置为:0.842960
第151次运行优化后的参数,权重为:0.678350,偏置为:0.842420
第152次运行优化后的参数,权重为:0.679799,偏置为:0.842827
第153次运行优化后的参数,权重为:0.677610,偏置为:0.841060
第154次运行优化后的参数,权重为:0.675659,偏置为:0.839420
第155次运行优化后的参数,权重为:0.678319,偏置为:0.840369
第156次运行优化后的参数,权重为:0.677006,偏置为:0.839407
第157次运行优化后的参数,权重为:0.677414,偏置为:0.839262
第158次运行优化后的参数,权重为:0.677794,偏置为:0.838674
第159次运行优化后的参数,权重为:0.679597,偏置为:0.839256
第160次运行优化后的参数,权重为:0.678737,偏置为:0.838123
第161次运行优化后的参数,权重为:0.681134,偏置为:0.838708
第162次运行优化后的参数,权重为:0.679479,偏置为:0.837318
第163次运行优化后的参数,权重为:0.679979,偏置为:0.837456
第164次运行优化后的参数,权重为:0.678996,偏置为:0.836537
第165次运行优化后的参数,权重为:0.680846,偏置为:0.837168
第166次运行优化后的参数,权重为:0.679632,偏置为:0.836003
第167次运行优化后的参数,权重为:0.680586,偏置为:0.836241
第168次运行优化后的参数,权重为:0.680065,偏置为:0.835253
第169次运行优化后的参数,权重为:0.681167,偏置为:0.835491
第170次运行优化后的参数,权重为:0.679493,偏置为:0.833920
第171次运行优化后的参数,权重为:0.680774,偏置为:0.834345
第172次运行优化后的参数,权重为:0.682635,偏置为:0.834818
第173次运行优化后的参数,权重为:0.681674,偏置为:0.833349
第174次运行优化后的参数,权重为:0.681559,偏置为:0.832781
第175次运行优化后的参数,权重为:0.683934,偏置为:0.833351
第176次运行优化后的参数,权重为:0.681872,偏置为:0.831650
第177次运行优化后的参数,权重为:0.682110,偏置为:0.831516
第178次运行优化后的参数,权重为:0.682151,偏置为:0.831049
第179次运行优化后的参数,权重为:0.684502,偏置为:0.831725
第180次运行优化后的参数,权重为:0.683916,偏置为:0.831124
第181次运行优化后的参数,权重为:0.682726,偏置为:0.830196
第182次运行优化后的参数,权重为:0.682803,偏置为:0.829904
第183次运行优化后的参数,权重为:0.684022,偏置为:0.829956
第184次运行优化后的参数,权重为:0.682911,偏置为:0.829105
第185次运行优化后的参数,权重为:0.684226,偏置为:0.829129
第186次运行优化后的参数,权重为:0.683007,偏置为:0.828024
第187次运行优化后的参数,权重为:0.686489,偏置为:0.829014
第188次运行优化后的参数,权重为:0.684561,偏置为:0.827532
第189次运行优化后的参数,权重为:0.684727,偏置为:0.827259
第190次运行优化后的参数,权重为:0.685112,偏置为:0.827188
第191次运行优化后的参数,权重为:0.686150,偏置为:0.827380
第192次运行优化后的参数,权重为:0.687748,偏置为:0.827632
第193次运行优化后的参数,权重为:0.685985,偏置为:0.826025
第194次运行优化后的参数,权重为:0.687625,偏置为:0.826404
第195次运行优化后的参数,权重为:0.686416,偏置为:0.825497
第196次运行优化后的参数,权重为:0.685882,偏置为:0.824825
第197次运行优化后的参数,权重为:0.686056,偏置为:0.824686
第198次运行优化后的参数,权重为:0.686413,偏置为:0.824682
第199次运行优化后的参数,权重为:0.686386,偏置为:0.824427
第200次运行优化后的参数,权重为:0.687019,偏置为:0.824530
第201次运行优化后的参数,权重为:0.686691,偏置为:0.823563
第202次运行优化后的参数,权重为:0.687876,偏置为:0.823960
第203次运行优化后的参数,权重为:0.687626,偏置为:0.823566
第204次运行优化后的参数,权重为:0.687269,偏置为:0.823114
第205次运行优化后的参数,权重为:0.687949,偏置为:0.823108
第206次运行优化后的参数,权重为:0.687824,偏置为:0.822895
第207次运行优化后的参数,权重为:0.688428,偏置为:0.823002
第208次运行优化后的参数,权重为:0.689085,偏置为:0.822670
第209次运行优化后的参数,权重为:0.689613,偏置为:0.822583
第210次运行优化后的参数,权重为:0.688765,偏置为:0.821745
第211次运行优化后的参数,权重为:0.689100,偏置为:0.820974
第212次运行优化后的参数,权重为:0.688116,偏置为:0.820257
第213次运行优化后的参数,权重为:0.687854,偏置为:0.819730
第214次运行优化后的参数,权重为:0.689673,偏置为:0.820426
第215次运行优化后的参数,权重为:0.688498,偏置为:0.819600
第216次运行优化后的参数,权重为:0.690563,偏置为:0.820403
第217次运行优化后的参数,权重为:0.690134,偏置为:0.819757
第218次运行优化后的参数,权重为:0.689298,偏置为:0.818993
第219次运行优化后的参数,权重为:0.689621,偏置为:0.818878
第220次运行优化后的参数,权重为:0.689550,偏置为:0.818610
第221次运行优化后的参数,权重为:0.690010,偏置为:0.818576
第222次运行优化后的参数,权重为:0.689778,偏置为:0.818184
第223次运行优化后的参数,权重为:0.690008,偏置为:0.817891
第224次运行优化后的参数,权重为:0.691079,偏置为:0.817933
第225次运行优化后的参数,权重为:0.690361,偏置为:0.817281
第226次运行优化后的参数,权重为:0.690739,偏置为:0.817284
第227次运行优化后的参数,权重为:0.690695,偏置为:0.816740
第228次运行优化后的参数,权重为:0.691009,偏置为:0.816799
第229次运行优化后的参数,权重为:0.690953,偏置为:0.816492
第230次运行优化后的参数,权重为:0.691184,偏置为:0.816380
第231次运行优化后的参数,权重为:0.692100,偏置为:0.816282
第232次运行优化后的参数,权重为:0.692451,偏置为:0.815920
第233次运行优化后的参数,权重为:0.691967,偏置为:0.815306
第234次运行优化后的参数,权重为:0.692089,偏置为:0.815087
第235次运行优化后的参数,权重为:0.692107,偏置为:0.814891
第236次运行优化后的参数,权重为:0.692681,偏置为:0.814947
第237次运行优化后的参数,权重为:0.692394,偏置为:0.814436
第238次运行优化后的参数,权重为:0.692185,偏置为:0.814224
第239次运行优化后的参数,权重为:0.692207,偏置为:0.814033
第240次运行优化后的参数,权重为:0.692184,偏置为:0.813838
第241次运行优化后的参数,权重为:0.693203,偏置为:0.814112
第242次运行优化后的参数,权重为:0.692365,偏置为:0.813448
第243次运行优化后的参数,权重为:0.692958,偏置为:0.813510
第244次运行优化后的参数,权重为:0.692438,偏置为:0.812994
第245次运行优化后的参数,权重为:0.692513,偏置为:0.812850
第246次运行优化后的参数,权重为:0.693432,偏置为:0.813187
第247次运行优化后的参数,权重为:0.693355,偏置为:0.813063
第248次运行优化后的参数,权重为:0.693099,偏置为:0.812669
第249次运行优化后的参数,权重为:0.693158,偏置为:0.812609
第250次运行优化后的参数,权重为:0.693460,偏置为:0.812713
第251次运行优化后的参数,权重为:0.693500,偏置为:0.812471
第252次运行优化后的参数,权重为:0.693274,偏置为:0.812316
第253次运行优化后的参数,权重为:0.693127,偏置为:0.812179
第254次运行优化后的参数,权重为:0.692723,偏置为:0.811670
第255次运行优化后的参数,权重为:0.693694,偏置为:0.811956
第256次运行优化后的参数,权重为:0.693233,偏置为:0.811567
第257次运行优化后的参数,权重为:0.693890,偏置为:0.811697
第258次运行优化后的参数,权重为:0.693880,偏置为:0.811532
第259次运行优化后的参数,权重为:0.693863,偏置为:0.811497
第260次运行优化后的参数,权重为:0.693772,偏置为:0.811166
第261次运行优化后的参数,权重为:0.694446,偏置为:0.811399
第262次运行优化后的参数,权重为:0.693630,偏置为:0.810761
第263次运行优化后的参数,权重为:0.693235,偏置为:0.810297
第264次运行优化后的参数,权重为:0.694077,偏置为:0.810607
第265次运行优化后的参数,权重为:0.693918,偏置为:0.810252
第266次运行优化后的参数,权重为:0.694827,偏置为:0.810482
第267次运行优化后的参数,权重为:0.694405,偏置为:0.810195
第268次运行优化后的参数,权重为:0.694582,偏置为:0.810129
第269次运行优化后的参数,权重为:0.694470,偏置为:0.809927
第270次运行优化后的参数,权重为:0.694932,偏置为:0.809945
第271次运行优化后的参数,权重为:0.694709,偏置为:0.809750
第272次运行优化后的参数,权重为:0.695076,偏置为:0.809793
第273次运行优化后的参数,权重为:0.695069,偏置为:0.809676
第274次运行优化后的参数,权重为:0.695279,偏置为:0.809657
第275次运行优化后的参数,权重为:0.694715,偏置为:0.809103
第276次运行优化后的参数,权重为:0.694833,偏置为:0.809023
第277次运行优化后的参数,权重为:0.695047,偏置为:0.809041
第278次运行优化后的参数,权重为:0.695080,偏置为:0.808900
第279次运行优化后的参数,权重为:0.695126,偏置为:0.808878
第280次运行优化后的参数,权重为:0.695554,偏置为:0.808940
第281次运行优化后的参数,权重为:0.695262,偏置为:0.808662
第282次运行优化后的参数,权重为:0.695517,偏置为:0.808716
第283次运行优化后的参数,权重为:0.695414,偏置为:0.808548
第284次运行优化后的参数,权重为:0.695120,偏置为:0.808274
第285次运行优化后的参数,权重为:0.695134,偏置为:0.808117
第286次运行优化后的参数,权重为:0.695708,偏置为:0.808356
第287次运行优化后的参数,权重为:0.695547,偏置为:0.808158
第288次运行优化后的参数,权重为:0.695745,偏置为:0.808221
第289次运行优化后的参数,权重为:0.695438,偏置为:0.807959
第290次运行优化后的参数,权重为:0.695943,偏置为:0.808046
第291次运行优化后的参数,权重为:0.696098,偏置为:0.808046
第292次运行优化后的参数,权重为:0.696378,偏置为:0.808004
第293次运行优化后的参数,权重为:0.695834,偏置为:0.807616
第294次运行优化后的参数,权重为:0.695891,偏置为:0.807601
第295次运行优化后的参数,权重为:0.696077,偏置为:0.807515
第296次运行优化后的参数,权重为:0.696184,偏置为:0.807503
第297次运行优化后的参数,权重为:0.695851,偏置为:0.807144
第298次运行优化后的参数,权重为:0.696440,偏置为:0.807333
第299次运行优化后的参数,权重为:0.696158,偏置为:0.807118
Process finished with exit code 0