美国有线电视新闻网的表现比完全连接的网络差 - 如何发现错误?

时间:2018-01-07 03:33:48

标签: tensorflow machine-learning neural-network conv-neural-network image-recognition

我正在尝试使用CNN而且我感到困惑,因为我建立的模型实际上学得比完全连接的NN更慢并且表现更差。这是两个模型:

完全连接:

hidden1 = tf.layers.dense(X, 2000, name="hidden1",                          
                          activation=tf.nn.relu)                            
hidden2 = tf.layers.dense(hidden1, 1000, name="hidden2",                    
                          activation=tf.nn.relu)                            
hidden3 = tf.layers.dense(hidden2, 1000, name="hidden3",                    
                          activation=tf.nn.relu)                            
hidden4 = tf.layers.dense(hidden3, 1000, name="hidden4",                    
                          activation=tf.nn.relu)                            
hidden5 = tf.layers.dense(hidden4, 700, name="hidden5",                     
                          activation=tf.nn.relu)                            
hidden6 = tf.layers.dense(hidden5, 500, name="hidden6",                     
                          activation=tf.nn.relu)                            
logits = tf.layers.dense(hidden6, 2, name="outputs")

CNN:

f = tf.get_variable('conv1-fil', [5,5,1,10])                                
conv1 = tf.nn.conv2d(X, filter=f, strides=[1, 1, 1, 1], padding="SAME")        
pool1 = tf.nn.max_pool(conv1, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding="VALID")
f2 = tf.get_variable('conv2-fil', [3,3,10,7])                               
conv2 = tf.nn.conv2d(pool1, filter=f2, strides=[1, 1, 1, 1], padding="SAME")
pool2 = tf.nn.max_pool(conv2, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding="VALID")
fc1 = tf.contrib.layers.flatten(pool2)
hidden1 = tf.layers.dense(fc1, 3630, name="hidden1",                        
                          activation=tf.nn.relu)                            
hidden2 = tf.layers.dense(hidden1, 2000, name="hidden2",                    
                          activation=tf.nn.relu)                            
hidden3 = tf.layers.dense(hidden2, 1000, name="hidden3",                    
                          activation=tf.nn.relu)                            
hidden5 = tf.layers.dense(hidden3, 700, name="hidden5",                     
                          activation=tf.nn.relu)                            
hidden6 = tf.layers.dense(hidden5, 500, name="hidden6",                     
                          activation=tf.nn.relu)                            
logits = tf.layers.dense(hidden6, 2, name="outputs")

基本上CNN有一个更浅的全连接网络,但增加了转换层而不是完全连接。在相同数量的时期和相同的数据集之后,CNN达到精确度~88%对比深nn的92%。如何调试这样的问题?设计转换层的好方法是什么?

0 个答案:

没有答案