赞
踩
记录一下学习过程中所遇的一些问题,方便日后查阅。
用tensorflow框架复现一下VGG16模型
VGG-16一共16层,可分为五个大块,各个层用的卷积核都是33 步长1,池化用22 步长2
第一块两个卷积 一个池化 深度64
第二块两个卷积 一个池化 深度128
第三块三个卷积 一个池化 深度 256
第四块三个卷积 一个池化 深度 512
第五块三个卷积 一个池化 深度 512
最后三个全连接,原模型神经元个数4096个,其他值也可以 原模型输出1000类,可根据自己认为需求进行修改
问题:
一:在将模型搭建好后(无正则化,含dropout,rule激活),优化函数使用Adam,学习率初始为0.001(递减),在进行训练后发现LOSS初始值极大(几百),正确率在30%,且出现LOSS减少而正确率却在不断下降的问题。
起初怀疑是Adam函数的运算量过大导致内存出错,
由于模型架构中
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=y_))
learning_rate = tf.placeholder(dtype='float', name='learning_rate')
train_op = tf.train.AdamOptimizer(learning_rate).minimize(loss)
correct_prediction = tf.equal(tf.cast(tf.argmax(logits, 1), tf.int32), tf.cast(tf.argmax(y_, 1), tf.int32))
acc = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
可以看出 loss在减小 问题不大, 关键在于acc 而acc和loss的区别就在于 在计算acc之前有一个优化函数的计算,所以极有可能是运算量过大出错。
但是在将优化函数换为SGD后扔存在这个问题。
进而怀疑是网络架构问题,是否由于网络层次过深而导致。
在将网络换为四层卷积一个池化 三个全连接后 没有发现问题。
故应该是网络架构问题,之后在网络中的各个层后加入batch_normalization,
此时,不会再出现loss过大问题,且loss在不断下降,但仍然出现acc不上升的问题。
下一步要进一步精简网络尝试。
二:在进行训练时的数据是已经处理过的.npy数据,整个train集(含val)大小3G多,
在直接读入后 造成电脑卡死情况,采取分割.npy数据的方式继续导入
x_npy = np.load('F:/bishe/NEW/x_train.npy') y_npy = np.load('F:/bishe/NEW/y_train.npy') x_train, x_val, y_train, y_val = train_test_split(x_npy, y_npy, test_size=0.1, random_state=40) nums = x_train.shape[0] num = math.ceil(x_train.shape[0]/3) x_npy1 = x_train[0:num] x_npy2 = x_train[num:2*num] x_npy3 = x_train[2*num:nums] y_npy1 = y_train[0:num] y_npy2 = y_train[num:2*num] y_npy3 = y_train[2*num:nums] print(nums) print(x_npy1.shape[0]) print(x_npy2.shape[0]) print(x_npy3.shape[0]) np.save(os.path.join(os.getcwd(),'x_train1.npy'),x_npy1) np.save(os.path.join(os.getcwd(),'x_train2.npy'),x_npy2) np.save(os.path.join(os.getcwd(),'x_train3.npy'),x_npy3) np.save(os.path.join(os.getcwd(),'y_train1.npy'),y_npy1) np.save(os.path.join(os.getcwd(),'y_train2.npy'),y_npy2) np.save(os.path.join(os.getcwd(),'y_train3.npy'),y_npy3) np.save(os.path.join(os.getcwd(),'y_val.npy'),y_val) np.save(os.path.join(os.getcwd(),'x_val.npy'),x_val)
此后每次导入需要读取的批次,电脑内存使用大幅降低(原7.8 现稳定在5左右)
对于问题一的解决:
在发现问题一时 设置的loss及acc输出为每一次迭代都输出 所以在最初始的时候可能出现波动大的问题。
再将输出设置为每十步输出一层 可以看出结果是在收敛的。
如下:
第1次迭代,train loss: 10.752131 train acc: 0.225000 lr: 0.001000
第1次迭代,val loss: 5.226247 val acc: 0.425000 lr: 0.001000
第11次迭代,train loss: 0.662952 train acc: 0.725000 lr: 0.001000
第11次迭代,val loss: 0.776423 val acc: 0.725000 lr: 0.001000
第21次迭代,train loss: 0.648543 train acc: 0.750000 lr: 0.001000
第21次迭代,val loss: 0.590871 val acc: 0.750000 lr: 0.001000
第31次迭代,train loss: 0.521123 train acc: 0.825000 lr: 0.001000
第31次迭代,val loss: 0.419332 val acc: 0.850000 lr: 0.001000
第41次迭代,train loss: 0.653275 train acc: 0.850000 lr: 0.000750
第41次迭代,val loss: 0.573315 val acc: 0.850000 lr: 0.000750
第51次迭代,train loss: 0.317870 train acc: 0.900000 lr: 0.000750
第51次迭代,val loss: 0.554917 val acc: 0.750000 lr: 0.000750
第61次迭代,train loss: 0.236718 train acc: 0.900000 lr: 0.000750
第61次迭代,val loss: 0.256582 val acc: 0.900000 lr: 0.000750
第71次迭代,train loss: 0.143120 train acc: 0.925000 lr: 0.000750
第71次迭代,val loss: 0.332731 val acc: 0.825000 lr: 0.000750
第81次迭代,train loss: 0.179183 train acc: 0.925000 lr: 0.000100
第81次迭代,val loss: 0.300221 val acc: 0.900000 lr: 0.000100
第91次迭代,train loss: 0.016300 train acc: 1.000000 lr: 0.000100
第91次迭代,val loss: 0.199386 val acc: 0.900000 lr: 0.000100
第101次迭代,train loss: 0.121653 train acc: 0.950000 lr: 0.000100
第101次迭代,val loss: 0.044486 val acc: 0.975000 lr: 0.000100
第111次迭代,train loss: 0.028860 train acc: 0.975000 lr: 0.000100
第111次迭代,val loss: 0.579328 val acc: 0.900000 lr: 0.000100
第121次迭代,train loss: 0.016226 train acc: 1.000000 lr: 0.000100
第121次迭代,val loss: 0.185061 val acc: 0.950000 lr: 0.000100
第131次迭代,train loss: 0.000344 train acc: 1.000000 lr: 0.000100
第131次迭代,val loss: 0.323078 val acc: 0.900000 lr: 0.000100
第141次迭代,train loss: 0.001631 train acc: 1.000000 lr: 0.000100
第141次迭代,val loss: 0.410976 val acc: 0.925000 lr: 0.000100
第151次迭代,train loss: 0.017172 train acc: 1.000000 lr: 0.000100
第151次迭代,val loss: 0.659347 val acc: 0.925000 lr: 0.000100
第161次迭代,train loss: 0.001449 train acc: 1.000000 lr: 0.000025
第161次迭代,val loss: 0.250248 val acc: 0.950000 lr: 0.000025
第171次迭代,train loss: 0.009112 train acc: 1.000000 lr: 0.000025
第171次迭代,val loss: 0.384092 val acc: 0.875000 lr: 0.000025
第181次迭代,train loss: 0.000005 train acc: 1.000000 lr: 0.000025
第181次迭代,val loss: 0.048897 val acc: 0.975000 lr: 0.000025
第191次迭代,train loss: 0.002062 train acc: 1.000000 lr: 0.000025
第191次迭代,val loss: 1.177598 val acc: 0.925000 lr: 0.000025
训练完毕
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。