Reputation:
import tensorflow as tf
import matplotlib.pyplot as plt
from tensorflow.examples.tutorials.mnist import input_data
mnist=input_data.read_data_sets('MNIST_DATA/',one_hot=True)
def init_weights(shape):
init_random_dist=tf.truncated_normal(shape,stddev=0.1)
return tf.Variable(init_random_dist)
def init_bias(shape):
init_bias_vals=tf.constant(0.1,shape=shape)
return tf.Variable(init_bias_vals)
def conv2d(x,W):
return tf.nn.conv2d(x,W,strides=[1,1,1,1],padding='SAME')
def max_pool_2by2(x):
tf.nn.max_pool(x,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')
def conv(input_x,shape):
W=init_weights(shape)
b=init_bias([shape[3]])
return tf.nn.relu(conv2d(input_x,W)+b )
def normal(input_layer,size):
input_size=int(input_layer.get_shape()[1])
W=init_weights([input_size,size])
b=init_bias([size])
return tf.matmul(input_layer,W)+b
x=tf.placeholder(tf.float32,shape=[None,784])
y_true=tf.placeholder(tf.float32,shape=[None,10])
x_image=tf.reshape(x,[-1,28,28,1])
conv1=conv(x_image,shape=[5,5,1,32])
conv1_pooling=max_pool_2by2(conv1)
# # conv2=conv(conv1_pooling,shape=[5,5,32,64])
conv2=conv(conv1_pooling,shape=[5,5,32,64])
conv2_pooling=max_pool_2by2(conv2)
conv2_flat=tf.reshape(conv2_pooling,[-1,7*7*64])
full_layer=tf.nn.relu(normal(conv2_flat,1024))
but when i tried to run this code i ran in to a strange error
ValueError: None values not supported.
During handling of the above exception, another exception occurred:
all those code was learn't from a tutorial but when i tried to run the jupyter notebook of that tutorial the code executed well and there was no issue or error after execution i dont know the reason why my code is popping up with an error
any kind of help is appreciated EDIT1: i didnt run this code in tensorflow session following the tutorial the tutor told to run this code in order to check any kind of issues
Upvotes: 1
Views: 3503
Reputation: 652
Ok, so the problem is that you forgot return in max_pool_2by2
, i.e. it should be:
def max_pool_2by2(x):
return tf.nn.max_pool(x,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')
So the complete code should read as:
import tensorflow as tf
import matplotlib.pyplot as plt
from tensorflow.examples.tutorials.mnist import input_data
mnist=input_data.read_data_sets('MNIST_DATA/',one_hot=True)
def init_weights(shape):
init_random_dist=tf.truncated_normal(shape,stddev=0.1)
return tf.Variable(init_random_dist)
def init_bias(shape):
init_bias_vals=tf.constant(0.1,shape=shape)
return tf.Variable(init_bias_vals)
def conv2d(x,W, name):
return tf.nn.conv2d(x,W,strides=[1,1,1,1],padding='SAME',name=name)
def max_pool_2by2(x):
return tf.nn.max_pool(x,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')
def convolutional_layer(input_x,shape,name):
W=init_weights(shape)
b=init_bias([shape[3]])
return tf.nn.relu(conv2d(input_x,W, name)+b )
def normal(input_layer,size):
input_size=int(input_layer.get_shape()[1])
W=init_weights([input_size,size])
b=init_bias([size])
return tf.matmul(input_layer,W)+b
x=tf.placeholder(tf.float32,shape=[None,784], name='x')
y_true=tf.placeholder(tf.float32,shape=[None,10], name='y_true')
x_image=tf.reshape(x,[1,28,28,1])
conv1=convolutional_layer(x_image,shape=[5,5,1,32],name='conv1')
print(conv1.get_shape())
conv1_pooling=max_pool_2by2(conv1)
print(conv1_pooling.get_shape())
conv2=convolutional_layer(conv1_pooling,shape=[5,5,32,64], name='conv2')
conv2_pooling=max_pool_2by2(conv2)
conv2_flat=tf.reshape(conv2_pooling,[-1,7*7*64])
full_layer=tf.nn.relu(normal(conv2_flat,1024))
Upvotes: 2